メモリの開放に関して

[戻る]
おなじ矛 2004/07/29(木) 00:44:09
こんばんわ!

VC++6.0 + SDI + WinXPでアプリケーション作成中です。
delete演算子に関してご質問いたします。

下記のよーなコードをかいて実行しましたが、
deleteのところで
Debug Error!
DAMEGE:after〜のエラーが出てしまいます。
何が原因なのでしょうか?

void AxxxView::OnButton1
{
 int i,j,test;
 char* MemBuf;

 j = 0;

 MemBuf = (char*) new char[100];
 ZeroMemory(MemBuf,100);

 for(i = 0; i <= 100/3; i++)
 {    
  test = 255;
  memmove(MemBuf+j, &test, 1);
  j = j + 3;
 }

 delete [] MemBuf;
}

以上です。ご教授の程よろしくお願いいたします。

RAPT 2004/07/29(木) 01:51:52
肝心のエラーメッセージを省略しないで下さい。
エラーメッセージはそのままコピペするのが基本です。

MemBuf = new char[100];
でいいんだけど、なぜに(char *)でキャストしている?

とざ 2004/07/29(木) 03:10:50
jがとる値(0, 3, 6,,,??)がいくつなのかを、
もう一度考えてみては?

アイススケーター 2004/07/29(木) 08:25:31
ためしてみて特にエラーは出ませんでしたが???

とざさんの

>jがとる値(0, 3, 6,,,??)がいくつなのかを、
>もう一度考えてみては?

は何??? jは99を超えないはずですが

Ban 2004/07/29(木) 11:29:05
この処理だけを main に貼っても正常に動きますし、
このままの処理で破棄時にエラーが出るようなら多分、
どこかでオーバランした結果ここが破壊されるとか、
どこかで多重解放などしていて、再利用されたポインタで
既に解放されてしまっているとか、
ここ以外の場所に原因があるのではないかと思います。

とざ 2004/07/29(木) 23:13:31
>>jがとる値(0, 3, 6,,,??)がいくつなのかを、
>>もう一度考えてみては?

>は何??? jは99を超えないはずですが

ですね。 失礼いたしました。

#まったくほんとに、何いってんだか;;

おなじ矛 2004/08/19(木) 00:56:05
[[解決]]
ご返事大変遅くなり申し訳ございません。

自己解決いたしました。
アドバイスどうもありがとうございました。

PATIO 2004/08/19(木) 14:05:35
何が原因でどう解決したのかを書いてから終わってほしいです。
これでは単に質問を出して去って行っただけになってしまいます。

質問に答えてもらった事に対してコミュニティに何らかの帰依をする事で
こういう掲示板と言うのは成り立っています。
質問者が最終的にどういう原因でどうすれば解決できたかを報告することで
このスレッドが後から来る人の貴重な情報源になります。
今の状態では、情報としての価値が全くありません。
質問者が回答者に回るだけが掲示板に対する恩返しではありません。

おなじ矛さんに限らず、
スレッドをきちんと終了することも十分恩返しになるのですから
後始末はきちんとしてほしいです。

おなじ矛 2004/08/20(金) 00:22:39
>>PATIO 様

大変申し訳ございません。

原因は多重解放でした。
アプリ終了時にまとめて開放するように
コードを書き換えたら。エラーがなくなりました。

ご忠告恐れ入ります。
今後ともよろしくお願いいたします。

古いスレッドには追加発言できません。