
いつも大変お世話になっております。
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ランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報