0

C は初めてです。多くの例で、malloc() が常に free() とペアになっているのを見てきました。しかし、たとえば、 *p = "a string" のようなことをすると、ポインタ p を解放できますか?メモリ リークの問題が発生しますか?

編集:すべての返信に感謝します!したがって、私の質問は次のようになります: 関数内に *p = "a string" がある場合、この関数呼び出しに使用されるすべてのメモリは、関数が終了したときにコンパイラによって自動的に "解放" されるので、そうしません。メモリを処理するために何かを手動で管理する必要がありますか?

4

5 に答える 5

4

いいえ、それを解放することはできません。

文字列リテラルなどを指すポインタを作成すると、割り当てられていないメモリを指します。明示的に割り当てたメモリのみを解放する必要があります (例: malloccallocまたはstrdup)。

他の関数も解放する必要があるメモリを割り当てる場合がありますが、その場合はドキュメントに記載する必要があります。

一般的な経験則として、リソース (メモリやファイルなど) を明示的に割り当てた場合は、それも解放する必要があります。

于 2013-10-22T14:03:25.850 に答える
1

を実行すると、文字列リテラルを*p = "a string"指すポインターが得られます。pこの場合、メモリは動的に割り当てられません。したがって、解放する必要はありpません。

于 2013-10-22T14:03:17.417 に答える
1

いいえ。「文字列」は読み取り専用の静的メモリに格納されたデータであり、p はそれを指すポインタです。malloc で割り当てられたメモリへのポインタのみを解放します。

于 2013-10-22T14:03:34.253 に答える
1

このポインターは文字列定数を指しているため、解放する必要はありません。解放しようとすると、実際には未定義の動作が発生する可能性があります。

メモリ管理の基本的なルール: メモリmalloc()を取得するために呼び出した場合は、メモリfree()が必要ないときに解放するために使用する必要があります。

于 2013-10-22T14:03:34.337 に答える