2

delete で解放しているオブジェクトがありchar*、そのデストラクタに free で解放されている があります。free を使用する理由は、strdup を使用mallocしてポインターを作成したためcharです。私が使用してmallocいる理由は、ほとんどのコード パスで最初に strdup を使用したためです。このシナリオはメモリの破損を引き起こしますか?

4

4 に答える 4

5

いいえ、呼び出しを適切に一致させれば、つまりfree()で割り当てられたメモリmalloc()とで割り当てられたメモリの場合、正常に動作します。deletenew

于 2009-10-28T08:40:46.950 に答える
2

あなたがしていることは正しいです。newedされたクラスは で割り当てを解除する必要がありますが、 (直接的または間接的に)deleteで割り当てられたメモリを所有している場合は、 でそのメモリの割り当てを解除する必要があります。mallocfree

于 2009-10-28T08:42:16.390 に答える
1

あなたの実装は正しいです。free() を使用して、malloc() (または strdup()) で割り当てられたメモリを解放します。これはまさに何をすべきかです。

要件は、そのメモリの割り当てに使用されたものと一致するプリミティブでメモリを解放することです。そして、この要件は実装で満たされています。

于 2009-10-28T08:55:40.277 に答える