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 : 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
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
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 : 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
en sortie:
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