row = n + 1;
col = n + 1;
//used n+1 and i=-1 to avoid segmentation faults
board = malloc(row*sizeof(char *));
for(i=-1;i<row;i++)
{
board[i] = malloc(col*sizeof(char));
if(board[i] == NULL)
{
printf("Out of memory");
exit(EXIT_FAILURE);
}
}
for(i=-1; i < n+1; ++i)
{
free(board [i]);
}
free(board);
当我尝试在运行时释放这个数组时,我的编译器变得狂暴,请解释一下,谢谢。
答案 0 :(得分:5)
数组在C中不能有负索引。
行:for(i = -1; i < row; i++)
我非常确定,这里有一个错误,其中free
释放了一个最后没有malloc()
的额外块,你必须得到一个段错误。
答案 1 :(得分:0)
malloc返回void指针,你必须强制转换它。最小指数在C中也为零。
board = (char**)malloc(row*sizeof(char *));
for(i=0;i<row;i++)
{
board[i] = (char*)malloc(col*sizeof(char));
if(board[i] == NULL)
{
printf("Out of memory");
exit(EXIT_FAILURE);
}
}