オブジェクトの1つで、画像データを格納するための符号なし文字配列メンバーを作成します。
unsigned char* imageData;
コンストラクターで、newで初期化します。
MyObject::MyObject()
{
int imageSize = 6054400;
imageData = new unsigned char[imageSize];
}
imageDataは、ループの過程全体でいっぱいになります。
このオブジェクト(MyObject)はループの最後まで削除されませんが、ループの途中でimageDataを削除する必要があります。だから私はちょうどこの関数を作成しました:
void MyObject::DeleteAllMembers
{
delete [] imageData;
}
そして私はそれをループの終わりに呼びます:
theObj.DeleteAllMembers();
問題は、プログラムがコード行に到達するたびに、次のことです。
delete [] imageData;
クラッシュし、次のエラーメッセージが残ります。
この時点で、なぜこれが起こっているのかわかりません。
私が試したことのいくつかは次のとおりです。
- imageSizeだけでなくimageSize+1でimageDataを初期化する
- 削除コマンドをデストラクタに移動し、ループを実行するたびにオブジェクトを手動で削除します
- delete [] imageDataの代わりにdeleteimageDataを使用しますが、delete[]を使用する必要があると確信しています。
- 削除してみましたが
imageData = 0
、残念ながらプログラムがクラッシュしdelete [] imageData
ます。 - を使用してみまし
memset(&imageData, 0, imageSize);
たが、アクセス違反エラーが発生しました。
毎回、プログラムは同じ行でクラッシュします。誰かが私のコードを見て、「あなたはモロン、あなたがしなければならないのは____________________だけです」と思っていることを知っています。誰かが私が間違っていることを教えてもらえますか?
編集:申し訳ありませんが、私は何か間違ったことを言いました。ループの開始時に毎回このオブジェクトを作成し、ループの終了時に削除されます。プログラムの最初と最後になぜ言ったのかわかりません。