4

計測器で検出するとメモリリークが発生しました。私はメモリ管理についてあまり経験がないので、この問題の考えられる原因は何かわかりません。メモリ リークは次のとおりです。

ここに画像の説明を入力

ここに画像の説明を入力

この種のメモリ リークについて考えられる理由を知りたいです。手がかりを教えてくれる人はいますか?

4

2 に答える 2

2

strdupmalloc内部で使用するため、編集されたものはすべて をstrdup使用して解放する必要がありますfree

例えば:

char *duplicate = strdup("abcdef");
...
free(duplicate);
于 2012-05-30T07:43:14.067 に答える
1

strdup()はライブラリ関数であるため、コード内にある呼び出し元が見つかるまでバックトレースに戻る必要があります。そこでは、メモリが割り当てられる結果となるライブラリ呼び出しが見つかります。プログラムの他の場所に、対応する解放呼び出しが必要です。

(解放関数は、必ずしも直接呼び出しであるとは限りませんfree()。たとえば、getaddrinfo()ライブラリ関数を呼び出す場合、対応する解放関数は ですfreeaddrinfo())。

于 2012-05-30T07:53:08.823 に答える