打印到数组的双指针 – 保持崩溃

我有一小段代码,我无法工作。 我有点新,我无法找到我做的错误。 谢谢

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; } 

您分配的是一个大小为m*m的一维数组,但您正在使用它,就好像您已经分配了一个锯齿状数组,其中每行包含m元素。

您可以分配与您所做的不同的方式

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

或者,您可以使用ij以线性方式放置所有元素。

 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); 

同样适用于printf

另外,请不要忘记在使用完之后free已动态分配的内存。