deleteで解放されたオブジェクトのデストラクタ内でfreeを使用する
-
06-07-2019 - |
質問
deleteで解放するオブジェクトがあり、デストラクタでfreeで解放される char *
があります。無料で使用している理由は、 char
ポインターの作成にstrdupと malloc
を使用したためです。 malloc
を使用している理由は、ほとんどのコードパスでstrdupを使用して始めたためです。このシナリオはメモリ破損の原因になりますか?
解決
いいえ、呼び出しが適切に一致する場合、つまり malloc()
で割り当てられたメモリの場合は free()
、で割り当てられたメモリの場合は
、正常に動作します。 delete
>新規
他のヒント
あなたがしていることは正しいです。 new
されたクラスは、 delete
で割り当てを解除する必要がありますが、 malloc
で割り当てられたメモリを所有している場合(直接的または間接的に)その後、 free
でそのメモリの割り当てを解除する必要があります。
実装は正しいです。 free()を使用して、malloc()(またはstrdup())で割り当てられたメモリを解放します。これがまさにすべきことです。
要件は、そのメモリの割り当てに使用されるプリミティブと一致するプリミティブでメモリを解放することです。そして、この要件は実装で満たされています。
何が間違っていたのかがわかりました。メソッドを介してオブジェクトをコピーとして渡していましたが、それは char *
を保持していました。関数が終了すると、その一時オブジェクトが削除され、 char *
が解放されます。メソッドの終了後に char *
が必要になりましたが、それはなくなりました。 2つの *
とマイナス1で修正されました。
所属していません StackOverflow