Probleme avec l'allocation memoire

kiran -  
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   -
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 81 Statut Membre 18
 
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 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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 156 Statut Membre 11
 
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 156 Statut Membre 11
 
Bonjour,

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