0

実行時にプログラムを閉じると、「アプリケーションがヒープ バッファの終了後にメモリに書き込みを行ったことを crt が検出しました」というエラーが表示されます。デストラクタを介して一意のptrのデリータにプログラムの実行を追跡したところ、デリータ関数の呼び出しでエラーが発生しました。私が言及したいもう 1 つの問題は、何らかの理由で、一意の ptr が含まれるクラス定義で、パブリック コピー コンストラクターが必要になることです。これらの問題を別のプロジェクトで別のクラスと同じプロジェクトで再現しようとしました。コピー コンストラクターとデストラクターを削除し、アクセス ラベルを変更しました。私は同じ問題を再現できませんでした。これら 2 つのプロジェクトの最大の違いは、共有ライブラリに問題があることです。これは問題でしょうか?面倒で冗長ですが、コピーコンストラクターを定義する必要がありますが、私はあまり気にしません。このメモリエラーに関する推測やアドバイスをいただければ幸いです。

4

1 に答える 1

3

crt は、アプリケーションがヒープ バッファーの終了後にメモリに書き込みを行ったことを検出しました。

はい、delete を呼び出すとこのメッセージが表示されますが、エラーが見つかったというメッセージです。原因はありません。コードのどこかで、配列の末尾を超えて書き込みを行っており、削除中に、メモリ マネージャーが範囲外の領域に「フットプリント」を見つけました。

すべての配列アクセスの前に、次を入れます。

assert(index<array_size);
于 2011-10-14T21:58:26.913 に答える