我尝试在C中创建一个矩阵并具有一些输入值,但是我不知道为什么它给我抛出了"分割错误"。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
int j;
int **a;
a = malloc(5 * sizeof(int));
for (i = 0; i < 5; i++) {
a[i] = malloc(4 * sizeof(int));
}
for (i = 0; i < 5; i++) {
for (j = 0; j < 4; j++) {
scanf("%d", (a[i][j]));
}
}
return 0;
}
给出了@bathsheba的答案,这就是您的代码应该是:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int (*a)[4] = malloc( sizeof(int[5][4]) );
for(int i=0;i<5;i++)
{
for(int j=0;j<4;j++)
{
scanf("%d", &a[i][j]);
}
}
free(a);
return 0;
}
- 您对
a
的分配应为
a=malloc(5*sizeof(int*));
很好地注意sizof
中的指针类型。在某些系统(2000年代初的Windows桌面)上,int
恰好与int*
的大小相同,但是您>不得假设。
-
scanf
将指针作为参数:最清晰的写作方法是scanf("%d", &a[i][j]);
-
不要忘记
free
完成后的内存。
最后,每次看到这样的矩阵时,我都会在内部死去。当然,它允许您使用[][]
符号,但通常最好将其建模为连续的内存块,然后使用IDIOM i * columns + j
在(i, j)
处访问元素。