メモリの開放に関して – プログラミング – Home

通知
すべてクリア

[解決済] メモリの開放に関して


おなじ矛
 おなじ矛
(@おなじ矛)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

こんばんわ!

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
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

肝心のエラーメッセージを省略しないで下さい。
エラーメッセージはそのままコピペするのが基本です。

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


返信引用
とざ
 とざ
(@とざ)
ゲスト
結合: 20年前
投稿: 8
 

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


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 22年前
投稿: 280
 

ためしてみて特にエラーは出ませんでしたが???

とざさんの

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

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


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

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


返信引用
とざ
 とざ
(@とざ)
ゲスト
結合: 20年前
投稿: 8
 

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

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

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

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


返信引用
おなじ矛
 おなじ矛
(@おなじ矛)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

ご返事大変遅くなり申し訳ございません。

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

何が原因でどう解決したのかを書いてから終わってほしいです。
これでは単に質問を出して去って行っただけになってしまいます。

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

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


返信引用
おなじ矛
 おなじ矛
(@おなじ矛)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

>>PATIO 様

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました