Probleme avec l'allocation memoire

Fermé
kiran - Modifié par kiran le 10/10/2010 à 14:26
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 oct. 2010 à 16:46
Bonjour,

je veux savoir pourquoi dans le code que je vais ecrire ils ont utilisé float** , c-a-d pointeur sur pointeur ,,et non pas tout simplement un pointeur ,,float * ..

voila le code source en c :

float** Allocate_Mat_Memory(int N, int M)
{
int i;
float **A = NULL;

/* On fait l'allocation de memoire pour un vecteur de N cases,
C'est un vecteur de pointeurs */
A = (float**) malloc( sizeof(float*) * N );

/* Si l'allocation à réussi, On fait une allocation de M cases
pour chaque ligne */
if( A != NULL )
for( i=0; i<N; i++ )
A[i] = (float*) malloc( sizeof(float) * M );

return A;

}


4 réponses

ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
10 oct. 2010 à 15:33
les N éléments de A (en tant que tableau) sont des pointeurs qui chacun pointent vers le début d'un tableau de M float.
d'où la notation float **A;
(si M et N étaient constants , ce serait équivalent à 'float A[N][M]');
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 817
10 oct. 2010 à 16:46
Comme le dit ydurce, c'est parce que tu as un tableau à deux dimensions.
float *tableau, te permet de stocker une adresse qui va te renvoyer dans une zone mémoire (le heap) dont les float seront écrit consécutivement. C'est l'ensemble qui formera le "tableau" (qui n'en est pas vraiment un au passage) : l'adresse + la taille (pour savoir le dernier élément).

Avec float **tableau, on stocke une adresse qui renvoye dans une zone mémoire. Cette zone et les suivantes seront de type float *t et contiendront donc les adresses mémoires d'autres zones. Ce mécanisme te permettra d'atteindre la deuxième dimension souhaitée pour ton tableau.

En espérant avoir été clair.

Cdlt,
1
lucas06150 Messages postés 151 Date d'inscription jeudi 17 décembre 2009 Statut Membre Dernière intervention 19 juillet 2012 10
10 oct. 2010 à 15:45
Tu n'as pas du tout le meme objet avec un float* qu'avec un float**.
je ne sais pas quoi te dire d'autre
-1
lucas06150 Messages postés 151 Date d'inscription jeudi 17 décembre 2009 Statut Membre Dernière intervention 19 juillet 2012 10
10 oct. 2010 à 15:29
Bonjour,

Sans le contexte de l'exercice comment savoir a quoi sert cette fonction ?
-2