Bonjour à tous,
J'ai hérité d'une librairie C écrite il y a des lustres et qui sert à allouer une plage mémoire.
Cette librairie est apellée par un programme fortran qui passe la variable à allouer en paramètre.
j'ai crée un petit programme de test qui reproduit le problème car malheureusement je ne vois pas ce qui cloche :/
Le programme fortran:
La librairie C:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 program testlib integer nelem,elsize,work,tbaddr,offset nelem=10 elsize=1 work=0 tbaddr=0 offset=0 call falloc(nelem,elsize,work,tbaddr,offset) end program testlib
Je compile avec sunstudio sans options particulières.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include <stdlib.h> #include <stdio.h> falloc_(nelem,elsize,basevec,addr,offset) int *nelem,*elsize,*basevec,*addr,*offset; { int noct; int adbase; int *ptr; int rest; if( *elsize > 8) noct=(*nelem + 1) * (*elsize); /* Nombre d'octets */ else noct=(*nelem)*(*elsize); /* Nombre d'octets */ if(noct<=0){ *addr=0; printf("noct < 0 bizarre \n"); return; } ptr=(int *) malloc(noct); /* Allocation */ /*(int *)*addr=ptr; */ *addr=(int)ptr; adbase=(int)basevec; *offset=(*addr-adbase)/(*elsize); rest=(*addr-adbase)-(*offset) * (*elsize); if(rest!=0) *offset=*offset+1; }
Merci à celui/celle qui pourrais jeter un oeil et me dire pourquoi j'ai des valeurs de sortie incohérentes ^^
par exemple: en entrée j'ai
en sortie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 nelem = 10 elsize=1 work=0 tbaddr=0 offset=0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 nelem = 10 elsize = 1 work = 0 tbaddr = 415111376 offset = 408813608
Partager