[interfaçage C/Fortran] erreur de segmentation
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:
Code:
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 |
La librairie C:
Code:
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;
} |
Je compile avec sunstudio sans options particulières.
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
Code:
1 2 3 4 5 6
|
nelem = 10
elsize=1
work=0
tbaddr=0
offset=0 |
en sortie:
Code:
1 2 3 4 5
| nelem = 10
elsize = 1
work = 0
tbaddr = 415111376
offset = 408813608 |