在C中初始化2D数组时的分割故障



我在标题文件中声明一个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的值如何。

最新更新