在 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 数组并用零初始化
我在这样的头文件中声明一个二维数组: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 数组并用零初始化