我试图为[10] [10] [2]的三维字符数组分配内存。将所有值设置为空间时,存在分段错误:[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] = ' ';
}
}
}
答案 0 :(得分:0)
您使用SIZE
的价值是多少? 0或1会导致崩溃,超过2会导致崩溃。你到处都在使用SIZE
吗?否则,您只有calloc
- 2,其他用途的硬编码&#39; 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] = ' ';
}
}
}
你真的应该有三种尺寸
#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] = ' ';
}
}
}