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

时间:2017-11-20 17:52:57

标签: c

我有一小段代码,我无法工作。 我有点新,我不能发现我做错了。感谢

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

1 个答案:

答案 0 :(得分:5)

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

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

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

   }
}
...
for(size_t i = 0; i<m ; i++)
   free(array[i]);
free(array);

或者,您可以使用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动态分配的内存。