2012-03-06 10 views
0

私は他の誰かが書いたコードを変更しています。コードのある部分では、ポインタのベクトルへのポインタを使用しています。ポインタのベクトルへのポインタ

  class2 *pointofclass2 = new class2(); 

     class1 * pointofclass1 = new class1(.....) 

     pointofclass2->push_back(pointofclass1); 

は、その後、コード

delete pointofclass2; 

は今、私は、これはメモリリークを引き起こしていると思います。私はこれが原因であるかどうかを確かめる前にこれを遭遇したことはありませんか?どんな助けでも大歓迎です。もしそうなら、メモリを解放する正しい方法は何ですか?

+0

'class2'は' vector'から継承していますか?あなたは間違いなく 'pointofclass2'を削除するべきですが、' pointofclass1'がメモリのどこかにまだ残っているのか疑問に思っていますか? 'class2'のデストラクタでクリーンアップする必要があります。あなたはあなたが記憶を漏らしていることをどのように知っていますかValgrind? – prelic

+0

A)メモリリークがあります。例えば私はプログラムを実行すると、それはますます多くのメモリを使い切ってしまいます。そしてB)私は、おそらくclass1 * pointofclass1 = new class1(....)の行を示すValgrindから失われるでしょう。 – Robert

答えて

1

pointofclass2を削除していますが、class1のデストラクタでclass1のポインタを保持するベクターを削除していない可能性があります。新しいクラス1(...)で作成されたオブジェクトはどこに削除されていますか?これはC++であり、自動ガベージコレクションはありません。

class2がベクトルの場合、実際にはにはが必要です。ベクトルはヒープ上にメモリを割り当てますので、ポインタを作成する必要があります。

1

push_back()で追加された要素がclass2のdtorで破棄されない限り、これはリークです。

関連する問題