0
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);

当我尝试在运行时释放这个数组时,我的编译器发疯了,请解释一下,谢谢。

4

2 回答 2

5

数组在 C 中不能有负索引。

在线:for(i = -1; i < row; i++)

我很确定,这里有一个错误,free释放了一个最后没有被编辑的额外块,malloc()你一定会得到一个段错误。

于 2013-11-08T03:21:35.997 回答
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);
        }
    }
于 2013-11-08T05:13:20.743 回答