-3

**object別のオブジェクト (構成) 内のメンバーとして( )を持っています。別の( )を指す**personnelメモリを解放し、それをingせずにプログラムを実行するだけでうまく実行したいのですが、しようとするとめちゃくちゃになりますすべてが起動しているのに、常にエラーが発生する " " **personnel**temppersonnel=tempdelete**personnelpersonnel=tempdelete **personnel_Block_Type_Is_Valid (pHead->nBlockUse)

(私はデストラクタ(およびvirtualベースデストラクタ)を持っていますが、それらのいくつかは何もしませんが、それでもエラーが発生します)。(私はあらゆる角度から、などを試しましたdelete personnel[i]delete []personnel[i]

(これで数日を失いました)

私は何か間違ったことをしていますか、それは正しいdeleteですか? もしそうなら、どうすればいいですか?

編集:

if(personnel!=NULL)
    {
        for(i=0;i<numberofemployees;i++)
        { **/*what to do here*/**

    delete []this->personnel[i];

        }
        /*delete personnel;*/

    }
    personnel=temp;
    numberofemployees++;

    }

**personnel はこのクラスのメンバーです (Employee **personnel、employee は他の派生クラスの基本クラスです。すべての種類の従業員、私はポリモーフィズムを使用しています)、この関数は従業員を追加するだけです。関数は長いですそのため、一部のみを掲載しています。ご理解いただければ幸いです。削除しない場合は、すべて正常に動作しているように見えます。そうしないと、アサーション エラーが発生します。

4

1 に答える 1

1

質問を理解しているかどうかわかりません。しかし、私の理解に基づいて、あなたが持っている場合:

struct Foo { ... };
Foo* foo = new Foo;
Foo** bar = &foo;

次に、delete fooor (そのうちの1つだけdelete *barを呼び出します)するだけです。

しかし、一般的にはそのようなものを追跡したくないので、代わりに や のようなスマート ポインターの使用を検討する必要がありstd::shared_ptrますstd::unique_ptr

于 2013-05-17T00:21:02.050 に答える