> Mais mon programme est appelé par un programme fortran
Euh, rassure-moi tu voulais dire "ma bibliothèque de fonction est appelé par un programme fortran", parce que l'espace d'adressage d'un processus à l'autre est complétement différent.
> Ces adresses sont des integer. J'aurai pour ma part préféré des unsigned int.
Euh, ce n'est qu'une question de convention. Un simple cast, et hop, tes int se transforment en unsigned int :
unsigned int i = (unsigned int) -1;
printf ("i = %u\n", i); // 4294967295
Ou utiliser un entier signé comme une adresse mémoire :
int i;
long addr = (long) &i; // là tu as une adresse sour forme d'entier signé
((int *)addr)[0] = 1234; // Positionne i à 1234
> Donc comme j'ai des int [...] zones mémoires aléatoires.
Ou tu débutes en programmation, ou tu expliques super mal, ou tu cherches à faire compliquer quand on peut faire simple. De ce que j'ai compris, tu as un programme fortran, qui te passes une zone mémoire sous forme d'entier (signé ou pas, il ne devrait pas y avoir de problème).
Toi tu veux allouer un nouveau buffer et renvoyer au programme fortran l'adresse de ce nouveau buffer sous forme d'offset par rapport à l'ancien (si ma mémoire est bonne, Fortran ne gère pas l'allocation dynamique).
Pourquoi ne pas simplement retourner l'adresse du buffer sous forme d'entier (signé ou pas, on s'en fous) ?
Dans tous les cas, n'espère surtout pas avoir une valeur constante dans ta variable "decalage".
[^] # Re: Re : Perdu dans la mémoire (malloc, stack, heap et système)
Posté par pierthi . En réponse au message Perdu dans la mémoire (malloc, stack, heap et système). Évalué à 3.
> Mais mon programme est appelé par un programme fortran
Euh, rassure-moi tu voulais dire "ma bibliothèque de fonction est appelé par un programme fortran", parce que l'espace d'adressage d'un processus à l'autre est complétement différent.
> Ces adresses sont des integer. J'aurai pour ma part préféré des unsigned int.
Euh, ce n'est qu'une question de convention. Un simple cast, et hop, tes int se transforment en unsigned int :
unsigned int i = (unsigned int) -1;
printf ("i = %u\n", i); // 4294967295
Ou utiliser un entier signé comme une adresse mémoire :
int i;
long addr = (long) &i; // là tu as une adresse sour forme d'entier signé
((int *)addr)[0] = 1234; // Positionne i à 1234
> Donc comme j'ai des int [...] zones mémoires aléatoires.
Ou tu débutes en programmation, ou tu expliques super mal, ou tu cherches à faire compliquer quand on peut faire simple. De ce que j'ai compris, tu as un programme fortran, qui te passes une zone mémoire sous forme d'entier (signé ou pas, il ne devrait pas y avoir de problème).
Toi tu veux allouer un nouveau buffer et renvoyer au programme fortran l'adresse de ce nouveau buffer sous forme d'offset par rapport à l'ancien (si ma mémoire est bonne, Fortran ne gère pas l'allocation dynamique).
Pourquoi ne pas simplement retourner l'adresse du buffer sous forme d'entier (signé ou pas, on s'en fous) ?
Dans tous les cas, n'espère surtout pas avoir une valeur constante dans ta variable "decalage".