2016-09-23 7 views
0

これを実行している問題は何かわかりません。私は2番目のforループ(内部配列を解放するはずです)を削除すると、正常に動作することがわかります。あなたの変数board問題2Dダイナミックメモリを解放する

int main(void) 
{ 
    int i; 
    char *board = malloc(sizeof(char *) * 8); 
    for (i=0; i<8; i++) 
     board[i] = malloc(sizeof(char *) * 8); 

    for (i=0; i<8; i++) 
     free(board[i]); 
    free(board); 
    return 0; 
} 
+1

これはストレートCコードであるため、Cに変更されました。 – NathanOliver

答えて

1

変数board、すなわち同じよう、charへのポインタです:次のように内側のループのコードが読み取る必要がある、あなたのboard変数の型は、あなたが本当に持っている意図したものであると仮定すると

文字列。つまり、boardの各「要素」は、の単一文字であり、ポインタではありません。ループ内であなたが

board[i] = malloc(sizeof(char *) * 8); 

を行うときにchar *charへのポインタを割り当て、いないことを意味します

あなたはポインタcharboardポインタを作りたい:

char **board = malloc(...) 

ああ、道によって、あなたは、ループ内の各文字列のために8つの以上の文字を割り当てています。ポインターの8つのメモリを割り当てます。たとえば、

board[i] = malloc(sizeof(char) * 8); 

あるいは、sizeof(char)は常に1さらに

board[i] = malloc(8); 

に等しく、私はこれがあなたに適用される場合は知っているが、Cの文字列は特別なターミネータを持っていることを覚えていないので、最後の文字。したがって、8文字の文字列が必要な場合は、のスペースを確保する必要があります。

0

は、ポインタ・ツー・文字ですが、あなたの内側のループが8つのに-CHARポインタ-ではなく、8つの文字のためにメモリを割り当てるされます。

for (i=0; i<8; i++) 
     board[i] = malloc(sizeof(char) * 8); 
+0

さらに良い - 'board [i] = malloc(sizeof * board [i] * 8);' –

関連する問題