Imprimer un double pointeur sur un tableau – continue de planter

J’ai ce petit morceau de code que je ne peux pas me rendre au travail. Je suis un peu nouveau et je ne peux pas trouver une erreur que j’ai faite. Merci

int main (void) { int **array; int i,j, m; scanf("%d", &m); array = malloc(sizeof(int) * (m*m)); for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { scanf("%d", &array[i][j]); } } for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { printf("%d", array[i][j]); } } return 0; } 

Ce que vous allouez est un tableau à une dimension de taille m*m mais vous l’utilisez comme si vous aviez alloué un tableau irrégulier dans lequel chaque ligne contient m éléments.

Vous pouvez allouer une manière un peu différente de ce que vous avez fait

 array = malloc(sizeof *array * m); if( array == NULL) { // error in malloc } for(size_t i =0; i 

Alternativement, vous pouvez mettre tous les éléments de manière linéaire en utilisant i et j .

 int *array; ... for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { if( scanf("%d", &array[i*m+j]) != 1){ // error in getting input. } } } ... free(array); 

Même chose avec printf aussi.

N'oubliez pas non plus de free dynamicment la mémoire allouée une fois que vous avez fini de l'utiliser.