質問

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

役に立ちましたか?

解決

いいえ、呼び出しが適切に一致する場合、つまり malloc()で割り当てられたメモリの場合は free()で割り当てられたメモリの場合は delete >新規、正常に動作します。

他のヒント

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

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

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

何が間違っていたのかがわかりました。メソッドを介してオブジェクトをコピーとして渡していましたが、それは char * を保持していました。関数が終了すると、その一時オブジェクトが削除され、 char * が解放されます。メソッドの終了後に char * が必要になりましたが、それはなくなりました。 2つの * とマイナス1で修正されました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top