在 c 中初始化二维数组时出现分段错误

Segmentation fault when initializing 2D array in c

我在这样的头文件中声明一个二维数组: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;
    }
}

您遇到了分段错误,因为您超出了数组的界限。

for (int i = 0; i < d + 1; i++)

应该变成:

for (int i = 0; i < d; i++)

另一个也一样。不要忘记数组索引从 0 到 1 小于数组的大小(以元素为单位)。

另外:

记分牌的内存分配了吗?当前,您创建了一个名为 arr 的数组,而不是为您正在初始化的记分牌创建数组,因此无论 u.

的值如何,scoreboard[u] 也可能越界

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 数组并用零初始化