在c中使用calloc分配三维数组的内存

在c中使用calloc分配三维数组的内存,c,arrays,dynamic-memory-allocation,calloc,C,Arrays,Dynamic Memory Allocation,Calloc,我试图为[10][10][2]的三维字符数组分配内存。将所有值设置为空格时,存在分段错误:11位于[0][2][1]。 代码如下: 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

我试图为[10][10][2]的三维字符数组分配内存。将所有值设置为空格时,存在分段错误:11位于[0][2][1]。 代码如下:

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] = ' ';
        }
    }
}
aiBoard=(char***)calloc(SIZE,sizeof(char**));
对于(i=0;i
您使用的
尺寸值是多少?0或1将导致崩溃,超过2将导致崩溃。您是否在任何地方都使用
SIZE
?否则,您只是
calloc
-ing 2,硬编码“2”的其他用法……应更改为
SIZE

像这样:

for(i = 0;i < SIZE;i++)
{
    for(j = 0; j < SIZE; j++)
    {
        aiBoard[i][j] = (char*)calloc(SIZE,sizeof(char));
    }

}

for(i = 0; i < SIZE; i++)
{
    for(j = 0; j < SIZE; j++)
    {
        for(k = 0; k < SIZE; k++)
        {
            aiBoard[i][j][k] = ' ';
        }
    }
}

for(i=0;i
您可以将
大小
2
混合为第二级。(
j
)您实际分配维度
[10][2][2]
-将第一个
j<2
更改为
j<10
。如果有一组嵌套循环而不是3个循环会更清晰。我明白你的意思,但它分配了大量内存。请注意,如果创建数组后不需要调整最后两个维度的大小,那么可以将其分配。大小定义为10请显示你对aiBoard的定义。。。。它不能是char aiBoard[10][10][2];由于该声明不能调用或malloc-ed…定义为char***aiBoard。
#define iSIZE (10)
#define jSIZE (10)
#define kSIZE (2)
  for(i = 0;i < iSIZE;i++)
    {
        for(j = 0; j < jSIZE; j++)
        {
            aiBoard[i][j] = (char*)calloc(jSIZE,sizeof(char));
        }

    }

for(i = 0; i < iSIZE; i++)
{
    for(j = 0; j < jSIZE; j++)
    {
        for(k = 0; k < kSIZE; k++)
        {
            aiBoard[i][j][k] = ' ';
        }
    }
}