初始化
我在标题文件中声明一个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;
}
}
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数组,并使用零
您会得到分段故障,因为您超越了数组的边界。
for (int i = 0; i < d + 1; i++)
应该成为:
for (int i = 0; i < d; i++)
,同样适用于另一个。不要忘记数组索引从数组的大小(元素)少于0到1。
也:
分配计分板的内存?当前,您创建一个名为arr
的数组,而不是您要初始化的记分板,因此scoreboard[u]
也可能超出界限,而不管u的值如何。