私は文字ポインタの配列(文字列リテラル)のためのメモリを解放する方法を理解しようとしていますが、構文をかなり理解することはできません。これは配列を宣言して初期化する方法です。
char * words[] = { "THESE", "ARE", "SOME", "WORDS" };
私はこれをやってみた...
free(words);
この...
for(i = 0; i < 4; i++) {
free(words[i]);
}
しかし最初のものはglibcで何らかの無効なポインタエラーを引き起こし、2番目のものはセグメンテーションエラーを引き起こします。
だから、この記憶を解放する正しい方法は何ですか?
回答:
回答№1の場合は3それを割り当てなかった場合(例: malloc
, calloc
)あなたはそれを解除してはいけません(例えば、 free
)。
ドキュメントは、関数から返されたポインタを解放する必要がある場合、一般的には非常に明確で明示的です strdup
そのような場合になります。