Probleme avec l'allocation memoire
kiran
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
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;
}
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;
}
A voir également:
- Probleme avec l'allocation memoire
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
- Nettoyer memoire iphone - Guide
- Mémoire virtuelle pour 32 go de ram - Guide
4 réponses
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]');
d'où la notation float **A;
(si M et N étaient constants , ce serait équivalent à 'float A[N][M]');
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,
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,