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

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 に答える