A voir également:
- Malloc d'un tableau double entree
- Double ecran - Guide
- Whatsapp double sim - Guide
- Tableau word - Guide
- Tableau ascii - Guide
- Tableau croisé dynamique - Guide
4 réponses
Tant qu'on y est, faisons complet pour ne pas fâcher un puriste qui passerait par là :
#include <stdio.h> #include <stdlib.h> int main(void) { unsigned int n = 4, i, j; /* allocation mémoire pour le tableau de sous-tableaux : */ float** m = (float**) malloc(n * sizeof(float)); /* allocation mémoire pour chaque sous-tableau de reels : */ for (i = 0; i < n; i++) m[i] = (float*) malloc(n * sizeof(float)); /* affichage de chaque reel : */ for (i = 0; i < n; i++) for (j = 0; j < n; j++) printf("M[%d][%d] = %f\n", i, j, m[i][j]); /* désallocation mémoire de chaque sous-tableau de reels : */ for (i = 0; i < n; i++) free(m[i]); /* désallocation mémoire du tableau de sous-tableaux : */ free(m); return 0; }
Hello !
Attention à bien allouer de la mémoire pour chaque sous-tableau.
Take care !
Attention à bien allouer de la mémoire pour chaque sous-tableau.
#include <stdio.h> #include <stdlib.h> int main(void) { unsigned int n = 4, i, j; float** m = (float**) malloc(n * n * sizeof(float)); /* allocation memoire pour chaque tableau de reels : */ for (i = 0; i < n; i++) m[i] = (float*) malloc(n * sizeof(float)); /* affichage de chaque reel : */ for (i = 0; i < n; i++) for (j = 0; j < n; j++) printf("M[%d][%d] = %f\n", i, j, m[i][j]); return 0; }
Take care !
Bug ! (allocations inutiles)
C'est mieux (pas de gaspillage !) ];
#include <stdio.h> #include <stdlib.h> int main(void) { unsigned int n = 4, i, j; float** m = (float**) malloc(n * sizeof(float)); /* allocation memoire pour chaque tableau de reels : */ for (i = 0; i < n; i++) m[i] = (float*) malloc(n * sizeof(float)); /* affichage de chaque reel : */ for (i = 0; i < n; i++) for (j = 0; j < n; j++) printf("M[%d][%d] = %f\n", i, j, m[i][j]); return 0; }
C'est mieux (pas de gaspillage !) ];
19 sept. 2004 à 09:05
je n'ai qu'une seule chose à dire: merci bcp bcp bcp!
C'est très clair et très complet, je n'en demandais pas tant!
Bonne continuation à vous, et encore merci!
Christophe.
19 sept. 2004 à 10:50
Attention. La première allocation est incorrecte. Il faut écrire :
Take care !
18 mai 2007 à 15:13
Voici mon code inspiré d'un autre prit sur ce forum :
int main(void)//Dans ce contexte, on a 2 lignes et 3 colonnes
{
unsigned int n=2, i, j, k=3;
float** m = (float**) malloc(k * sizeof(float*));
/* allocation memoire pour chaque tableau de reels : */
for (i = 0; i < n; i++)
m[i] = (float*) malloc(n * sizeof(float));
/* affichage de chaque reel : */
for (i = 0; i < n; i++)
{ for (j = 0; j < k; j++)
{
m[i][j] = (i*10)+(j);
printf("M[%d][%d] = %.0f\n", i, j, m[i][j]);
}
}
/* désallocation mémoire de chaque sous-tableau de reels : */
for (i = 0; i < n; i++)
free(m[i]);
/* désallocation mémoire du tableau de sous-tableaux : */
free(m);
getchar();
return 0;
}
Donc, pour malloc, un sous-tableau c'est comme une colonne de '1' dans l'exemple ci-bas?
1234
1097
1876
Alors, en bas, il est question de son attribution de mémoire, vrai?
unsigned int n=4, i, j, k=3;
float** m = (float**) malloc(k * sizeof(float*));
********************
ET
for (i = 0; i < n; i++)
m[i] = (float*) malloc(n * sizeof(float));
Vaut pour chaque élément du vecteur 0, soit au élément correspodant, pour fin visuel, 1234.
***************
En somme, ma question est...
Puisque "float** m = (float**) malloc(k * sizeof(float*));"
Est-ce bien un allocation de mem pour un vecteur de grandeur 4?
Quelqu'un a une idée?
8 mars 2013 à 22:00