/ /文字ポインタ(文字列リテラル)の配列を解放しますか? - c、配列、ポインタ、メモリ

文字ポインタ(文字列リテラル)の配列を解放しますか? - c、配列、ポインタ、メモリ

私は文字ポインタの配列(文字列リテラル)のためのメモリを解放する方法を理解しようとしていますが、構文をかなり理解することはできません。これは配列を宣言して初期化する方法です。

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 そのような場合になります。