我有一小段代码,我无法工作。 我有点新,我不能发现我做错了。感谢
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;
}
答案 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);
或者,您可以使用i
和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);
同样适用于printf
。
在完成操作后,也不要忘记free
动态分配的内存。