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.