我正在这样的头文件中声明2d数组:int ** arr; 然后我分配内存,并用零初始化它。 但是我遇到了细分错误。
这是我的代码:
arr = (int **)malloc(d * sizeof(int *));
for (int u=0; u<d; u++)
arr[u] = (int *)malloc(q * sizeof(int));
for(int i=0; i<d+1; i++)
{
for(int j=0; j<q+1; j++)
{
arr[i][j]=0;
}
}
答案 0 :(得分:2)
d + 1和q + 1都在边界之外。 使用d和q
如果您想初始化为零,请使用 calloc(),它易于使用并减少了多余的操作
arr = (int **)malloc(d * sizeof(int *));
for (int u=0; u<d; u++)
scoreBoard[u] = (int *)calloc(q , sizeof(int));
此代码将创建2d int数组并以零初始化
答案 1 :(得分:1)
由于超出了数组的边界,因此出现了分段错误。
for (int i = 0; i < d + 1; i++)
应成为:
for (int i = 0; i < d; i++)
对于另一个也是类似的。不要忘记数组索引比数组的大小(以元素为单位)小0到1。
也:
记分板的内存分配了吗?当前,您要创建一个名为arr
的数组,而不是为要初始化的记分板创建一个数组,因此scoreboard[u]
可能也超出范围,而与u的值无关。