【发布时间】:2014-12-08 02:28:52
【问题描述】:
我正在尝试为 [10][10][2] 的 3 维字符数组分配内存。将所有值设置为空格时,会出现分段错误:[0][2][1] 处的 11。 代码如下:
aiBoard =(char ***) calloc(SIZE,sizeof(char **));
for(i = 0; i < SIZE;i++)
{
aiBoard[i] = (char **)calloc(SIZE, sizeof(char*));
}
for(i = 0;i < SIZE;i++)
{
for(j = 0; j < 2; j++)
{
aiBoard[i][j] = (char*)calloc(2,sizeof(char));
}
}
for(i = 0; i < SIZE; i++)
{
for(j = 0; j < SIZE; j++)
{
for(k = 0; k < 2; k++)
{
aiBoard[i][j][k] = ' ';
}
}
}
【问题讨论】:
-
您将
SIZE和2混合用于第二级。 (j) -
您实际上分配了维度
[10][2][2]- 将第一个j < 2更改为j < 10。使用一组嵌套循环而不是其中的 3 个会更清楚。 -
我明白你的意思,但它分配了很多内存。
-
请注意,如果您在创建数组后不需要调整最后两个维度的大小,那么您可以分配它with a single malloc call
标签: c arrays dynamic-memory-allocation calloc