いつも大変お世話になっております。
VC++初心者です。
現在、VC++6.0(MFC)のソース修正を行っております。
そのソースを長時間実行させると、メッセージボックスで
タイトル:ソフト名
メッセージ:Out of memory
と出てきて悩んでいます。
(コンパイル、ビルドは成功しています。)
(そのソフトを立ち上げなおすと、しばらくの間は正常に動作します。)
大変お手数ですが、
この問題を対処する手順や怪しいと思われる箇所を
経験則でも宜しいので教えて頂けませんでしょうか。
No.3ベストアンサー
- 回答日時:
ほぼ間違い無く「メモリリーク」でしょうね。
・newしたオブジェクトをきちんとdeleteしているか?
・オブジェクトのポインタを保持する変数に上書きでnewしてないか?
・ヒープメモリの確保と開放(mallocとfree)は正しく行っているか?
・関数を呼ぶたびに生成されるオブジェクトを放置してたりしないか?
などをチェックしましょう。
ご回答、ありがとうございます。
やはり、メモリリークですか、、、
メモリリークの対処はとても厄介、と噂で聞いていたので、
今まで私自身、newしたら必ずdelete、おまじないのように
コーディングしていました。
しかし、先人の残したソースでこの問題が、とうとう
身に降りかかってきているので、修正できるかかなり心配です。
また、チェックする項目を教えていただき、ありがとうございます。
現状では、ここまで調べられました。
>・newしたオブジェクトをきちんとdeleteしているか?
newしている箇所は3つ、いずれもスレッドをつくっているようです。
deleteはしていなさそうです。
>・オブジェクトのポインタを保持する変数に上書きでnewしてないか?
すみません、これはどういうことなのでしょうか。
>・ヒープメモリの確保と開放(mallocとfree)は正しく行っているか?
malloc、freeを使用している箇所はございませんでした。
>・関数を呼ぶたびに生成されるオブジェクトを放置してたりしないか?
「オブジェクトを放置」ということは、「newしたら必ずdelete」と
いう認識で宜しいでしょうか。
また、調査が進められ次第ご連絡します。
No.4
- 回答日時:
直接の原因としてはnewに失敗しているんでしょう。
newの失敗の原因としては、deleteのし忘れの他、管理領域を壊してしまって、まだメモリがあるのに、newできなくなってしまっていることが考えられますね。
経験則でいうと、調べるのはかなり大変だと思いますが、地味にやるしかないですね。
ご回答、ありがとうございます。
噂には聞いておりましたが、かなり大変なのですね。
ちなみに、
>管理領域を壊してしまって、まだメモリがあるのに、
>newできなくなってしまっていること
とは、どういうことなのでしょうか。
管理領域とそうでない領域を調べる方法というものがあるのでしょうか。
(レベルが低くてすみません。)
宜しければ、再度ご教授頂きたくお願いします。
No.2
- 回答日時:
単純にアクセスしちゃいけないところにアクセスしているん
でしょうから、ループしている中の変数とか加算してる
変数とかをおっていけばいいんじゃないでしょうか。
後、質問者さんが修正する前にはそのエラーはありましたか?
もし、なかったのなら、あなたの修正した部分が怪しいです。
修正前のソースと見比べてみてはいかがでしょうか。
ご回答、ありがとうございます。
>単純にアクセスしちゃいけないところにアクセスしているん
>でしょうから、ループしている中の変数とか加算してる
>変数とかをおっていけばいいんじゃないでしょうか。
「アクセスしちゃいけないところにアクセスしている」とは、
例えばどういうことなのでしょうか。
(レベルが低くてすみません。)
また、「変数とかをおっていけばいいんじゃない」とは、
デバグモードで追っていきますよね。
私は「デバグモードで追う」という事が、他の人が書いたソースだと
うまく出来ません。
(自分の書いたソースですと怪しい箇所とかが、予測つけられるのですが、、、)
何か追う為のコツというものはありますか。
>後、質問者さんが修正する前にはそのエラーはありましたか?
いいえ、私の修正前のソースでエラーが発生しました。
自分で書いたソースならある程度、エラー発生箇所の予想が
立てられるですが、
先人が書いたソースのため、全く予想ができていないのが現状です。
No.1
- 回答日時:
■メモリリーク
デバックモードで起動して、OutOFMemoryが出る前に終了。
メモリリークしていないか調べる。
メモリリークを調べる方法は、ご自分で調べて下さい。
(この程度をできないことでは無理)
記述に関して
MFCということですが、例外処理は正しく記述できていますか?
MFCの場合の例外処理は決まりがあったと思います。
MSDNで調べてみましょう。
>この問題を対処する手順や怪しいと思われる箇所
ソースコードもないのに具体的に箇所を指摘できません。
どういった処理をしているのかすら不明なのですから。
ご回答、ありがとうございます。
>メモリリークしていないか調べる。
>メモリリークを調べる方法は、ご自分で調べて下さい。
>(この程度をできないことでは無理)
メモリリークを疑うところはnewしたものがdeleteされているか、
という事と認識しています。
(この認識が合っているか、あまり自信ないです。)
>MFCということですが、例外処理は正しく記述できていますか?
例外処理はされていなさそうです。
>>この問題を対処する手順や怪しいと思われる箇所
>ソースコードもないのに具体的に箇所を指摘できません。
おっしゃるとおりです。
先人が残していったソースを修正しており、そのソースを
読み解くだけでも相当な時間がかかってしまいそうなので、
このような質問をさせて頂きました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- オンラインゲーム もうすぐスプラトゥーン3が発売されるということで、現在購入しようか迷っています。 私は完全初心者で、 1 2022/08/27 01:38
- その他(パソコン・スマホ・電化製品) サンダーバードえメールについて 2 2023/01/27 21:15
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- オンラインゲーム VCしながらゲームしたい… 2 2022/06/11 16:04
- 書類選考・エントリーシート 就活で病気から立ち直った経験を題材にしたいと考えています。 現在都内私文2年男です。現在は完治してお 4 2023/02/02 14:16
- CPU・メモリ・マザーボード BIOS画面で固まる(メーカーロゴの画面) 4 2022/08/03 17:41
- 画像編集・動画編集・音楽編集 動画編集の処理時間と編集後の動画容量について 2 2022/12/29 21:27
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- Mac OS Macで今あるファイルの連番(ページ番号)に足し算をしてリネームしたい 1 2022/10/12 17:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクト型の変数が定義さ...
-
クラス内にWin32APIのコールバ...
-
C# panel内のコントロールの使...
-
CreateObjectとはどういう意味...
-
デザイナ時のエラー「オブジェ...
-
c# nullは空集合として扱かって...
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
ダイアログ表示時にチェックボ...
-
MFCのCListCtrlでスクロールを検出
-
MFCのドラッグ&ドロップについて
-
【C++】相互参照
-
イベントにAddHandlerされてい...
-
(UWSC) 「#32770」の意味わかり...
-
OnInitDialog()の関数の組み込み方
-
ConsoleApplicationから別プロ...
-
privateなメンバ関数をテストす...
-
継承を重ねた場合のコストはど...
-
【ASP.NET】 独自で作成したク...
-
このコンパイルエラーの意味に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CreateObjectとはどういう意味...
-
オブジェクト型の変数が定義さ...
-
ボタンを押すとラベルの文字を...
-
C# panel内のコントロールの使...
-
コンストラクタ内でのthisポインタ
-
クラス内にWin32APIのコールバ...
-
メモリリークが発生するのはど...
-
【VC++6.0(MFC)】「Out of memo...
-
関数で値渡しと参照渡しではど...
-
オブジェクトをどこでdisposeす...
-
C++の連想配列の使い方
-
すべてのページにServer.Create...
-
VB6では、Applicationは未定義...
-
チュートリアル : オブジェクト...
-
SetとNothingの存在意味?
-
Visual studio c# android オブ...
-
【VC++.NET】コンストラクタと...
-
C#でExcelを起動したい
-
ゆかりネットで東北ずん子exを...
-
ADODB.Connectionはインターフ...
おすすめ情報