ショートストーリー。 。 。私は、新しい演算子と削除演算子をオーバーライドしようとしています。新しいオン大丈夫であるように見えるが、上の私は、コード「スカラー削除デストラクタ()」をオーバーライドするにはどうすればよいですか?
cCellList::~cCellList()
{
STPINT loop;
for (loop = 0; loop < count; loop++)
{
delete cells[loop];
}
free(cells);
}
のこのビットに問題があるdelete演算子を削除し、私のオーバーライドさに行くされていないものが出て働いていないので、ここで削除します。スタックトレースは、コードの行が実行されている
ExeName.exe!Cell::'scalar deleting destructor'()
ExeName.exe!cCellList::~cCellList()
ExeName.exe!Cell::'scalar deleting destructor'()
がcells
がタイプcCellList *
である
delete cells
であると言います。
ロングストーリー。私はこの実行可能ファイルを約20年間パートタイムで作業しており、ソースコードは約14 MBです。 VS2010を現在使用しているすべてのアンマネージドC++。私は、「オブジェクト指向の拡張機能を持つThinkC」という名前のコンパイラを使い始めました。おそらくあなたの多くは、あまりにも若いので、その日を覚えていないでしょう。
メモリ管理の問題があり、時には奇妙なことが起こることがあります。 Purifyのようなサードパーティーのソリューションをこのプログラムで使用できるようになってから、私は長い間、このポイントを通過しました。彼らは私がコードをインスツルメントしようとすると爆発するだけです。だから私は自分のmalloc/freeを書いており、メモリに何が起こっているのかをよりよく追跡するために、これらを接続しています。これまでのところ、私は自分のシステムですべてのメモリを割り当てていますが、この場合、予測可能な結果で、私の代わりに通常の "フリー"になります。
> 20年以上コーディングしている場合は、最小限のテストケースを作成する方法を知っておく必要があります。 1つを作成し、ここに投稿してから、お手伝いしてください! –
この質問も参照してください:http://stackoverflow.com/questions/4948339/why-is-a-scalar-deleting-destructor-being-called-as-a-result-of-vector-delete-on。 –
あなたは20年近くコーディングしてきましたが、あなたは "自分のmalloc/freeを書く"していて、C++で 'operator new'のオーバーロードを扱う方法を知らないのですか? –