• 締切済み

メモリーリークエラーが起こる

メモリーリークエラーが起こるのですが、理由はなんなんでしょう? よく起こるのは、プログラムをコンパイルしたり実行したりしたときになるような気がするんですが、なんでリークエラーが起こるんでしょうか? 解決法とかありませんか?どなたか宜しくお願いします。

みんなの回答

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

>メモリーリークエラーが起こるのですが、理由はなんなんでしょう? メモリーリークはmalloc()やnewした領域を開放し忘れたときに発生します。 >よく起こるのは、プログラムをコンパイルしたり実行したりしたときになるような気がするんですが、なんでリークエラーが起こるんでしょうか? コンパイルのときは分かりませんが、 #つーか、リークが発生するコンパイラって何?すげー問題あるんだけど プログラム実行が終了した時には、上記のような問題のあるプログラムの場合は警告されることがあります。 サーバーのデーモンのように24時間動き続けるプログラムの場合、それとは分からずに徐々にメモリを食いつぶし、ある日突然他のプログラムがメモリ不足に陥ることになります。 >解決法とかありませんか?どなたか宜しくお願いします。 プログラムのユーザーの場合:作った人に文句をいいましょう。 プログラマの場合:確保したメモリをきちんと開放しているか全ての経路でチェックしましょう。 C++の場合、STLを使う、メモリ確保が必要なデータをクラスでラップし、デストラクタで開放するなどの方法が有効です。

noname#114571
質問者

お礼

お返事ありがとうございました。 >メモリーリークはmalloc()やnewした領域を開放し忘 >れたときに発生します。 やっぱり普通はそうですよね。でも、malloc()などは使っていないんですよ。 何でか不思議です。 コンパイラはC++builderを使っているんですが。不思議です。 コンパイルしたときに間違いがありエラーとなったときにたまに出るんです。エラー部分を直しもう一度コンパイルしてもまたエラーが出て、どこが間違ってるんだー?と見直しても解からず、ソースを念のためメモ帳か何かにコピーしておいてから、C++builderを閉じてもう一度立ち上げてやってみようと、閉じると「メモリーを○回開放し忘れています」と出るんです。 で、再起動してもう一度C++ビルダーを開いて、さっきコピーしてとっておいたソースを貼り付けると、さっきはどこがおかしいのかわからないがエラーが出て続けていたソースが、何の問題も無くコンパイルされ実行すると、ちゃんとできるんです。 何でこんなことが起こるのかわかりません。インストール時何か問題があったんですかね?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • メモリーリーク

    最近、メモリーリークエラーが出るんですが、何で出るんでしょうか? 対策法とかないんでしょうか? メモリーリークが起こると、再起動しないといけないみたいで面倒です。 最悪いくつまでメモリが返されないと不安定になったり動かなくなったりするんでしょうか? 僕のは最近は4つエラーが出ます。 宜しくお願いします。

  • WindowsCE機でのメモリーエラー

    WindowsCE機で立ち上げたすぐの状態で、デスクトップのアイコンの絵が表示されず、コントロールパネルを開こうとしても「メモリー不足です。実行中のプログラムをいくつか終了してから・・・」なるメモリーエラーが表示されます。結局何も出来ない状態です。この状態に陥った原因と、解決方法をご教授ください。よろしくお願いします。

  • こういうのはメモリーリークに該当しますか?

    0.9x時代から、ながいことMozilla Suiteを愛用しています。 ところで、ながいこと、Mozillaで困った現象が「どうやら私の環境だけで?」発生します。 画像数の多いホームページを見たり、写真が添付されたメールが続いたりすると、システムの空きメモリーがぐんぐん減ります。 で、画像のないホームページへリンクで移ったり、メールの写真整理が終わって、何時間経っても減ったメモリーが元に戻りません。 Mozillaが起動しているあいだじゅうはキャッシュのつもりで保持されるのかなあ?とも思って、Mozillaを一旦クローズしてみました。 一旦クローズすると、消費メモリーが戻るには戻るのですが、たいがいは半分程度しか戻ってくれません。 (100回に1、2度の割り合いで、ごっそり元通りにメモリーが回復することもたまにあります) 半分しか戻らないメモリーで、再度Mozillaを起動して使っていると、すぐにメモリーは使い切ってしまい、システムが不安定になります。 (多分本当なら、スワップされてシステム不安定は回避される建て前のはずだと思うんですが) あんまり気になるので、Bugzillaに報告をしてみましたが、書き方が不適切でとんちんかんだったのだと思います、全然誰にも相手にして貰えませんでした。 (;;) 私はプログラミングのことがまだよくわからないので、いろいろな「又聞き」でメモリーリークなのかと思い込んでいたのですが、このような現象のことは、何と言えばよいでしょうか?

  • c++Builder ver6.0のパッケージエラー

    コンパイル実行できたc++Builderプログラムを USBメモリーに保存し自宅のパソコンで 実行させたところ とくに複雑でもないプログラムなのに --------------- コンパイル [リンカ 致命的エラー] Fatal: ファイル DCLUSR.BPI が開けません といったヘンなエラーが発生します. メニューバーのプロジェクトのオプション のパッケージ ダグの パッケージ再構築 の中のDCLUSRをいちいち削除しないと 実行ができません。 何かよい方法はないものでしょうか・

  • USBメモリーが取り外せない

    USBメモリーを外すために、「ハードウェアの安全な取り外し」を実行すると「取り外しエラー」となります。(添付参照) 原因と解決法をどなたか教えて下さい。 OS=WinXP_sp3 

  • エラーについて

    プログラムをコンパイルはできるのですが、実行するとエラーが出てしまいます。 run-time error R6000 -stack overflow と出るのですが、これはどういう意味なのでしょうか? どこを直せばいいのかわからず困っています。よろしくお願いします。

  • プログラム実行時にわからないエラーメッセージが出ました

    書いたプログラムをcygwinでコンパイルし実行してみたのですが 数値を入力していくと次のようなエラーメッセージが出ました。 エラーの意味と、可能なら解決法をおしえていただきたいです。 よろしくお願いします。 12 [main] so 3092 _cygtls::handle_exceptions: Error while dumping state ( probably corrupted stack) Segmentation fault (core dumped)

  • メモリリークを調べています。

    メモリリークを調べています。 MFC(VC2005)です。 MFC拡張DLLで作成したアプリケーションにメモリリークがないかを調査し始めたのですが、VisualStudioでデバッグでは 「Detected memory leaks!」は出ません。 パフォーマンスモニタで、このDLLを静的リンクしたEXEのPrivateByteを約90時間監視すると、2回だけ大きな上昇(といっても数10KB)が見られました。 上昇するまでは横ばいですが、この横ばいの時間が2回とも異なります。 これはメモリリークと言えるのでしょうか? ちなみに、このDLLの調査対象機能は画像描画機能で、定期的にメモリ確保→メモリ解放を繰り返します。 メモリリークでないとしたら、どう結論付けたら良いでしょうか? 解決方法はありますか? 私としてはフラグメンテーションを疑っています。

  • コンパイルエラー

    初めまして 当方VB6.0にてプログラムを組んでいるのですが、mid関数を入れてコンパイルをすると、 コンパイルエラー:プロジェクトまたはライブラリーが見つかりません と出てコンパイルできません。 このような問題はどうすれば解決できるのでしょうか? よろしくお願いします。

  • Visual Studioのメモリリークについて

    質問を見ていただいて有り難うございます。 当方、現在MFCのダイアログベースのプログラムを行なっているのですが、プログラム終了時にメモリリークが発生します。 今のところプログラムの動作自体に影響はないのですが、想定外の動作が起こると困るのでなんとかこのエラーを取り除きたいと考えています。 メモリリークの殆どは _CrtSetBreakAlloc(Num);(指定した順序のメモリ割り当て時にブレークポイントを発生させる) を利用して、メモリリークが起こっている部分のブレークポイントをチェックして消したのですが、どうしても残りのメモリリークが消えません。 残りのメモリリークは_CrtSetBreakAlloc(Num)で指定してもブレークポイントが出てきませんでした。 _CrtSetBreakAlloc(Num)は『ファイル名.cpp』のInitInstanceおよびコンストラクタで呼び出してみましたが、どちらも同じ結果になりました。 また、試しに『ファイル名Dlg』クラスを使用しない(ダイアログを開かないようにコメントアウト)ようにして終了しても同じ結果になりました。 _CrtSetBreakAlloc(Num)を設定する適切な位置や、このようなメモリリークが出る原因、解決方法などについてご存知の方がいらっしゃいましたら、お教えください。 よろしくお願いします。

このQ&Aのポイント
  • 男性心理についてですが、こちらの好意を知ってて、答える気はないのに、毎月遊ぼうと言ってくる男性の心理について教えてください。
  • 男性は遊ぶことによってストレスを解消したり、楽しい時間を過ごしたいと思っていることがあります。ただし、彼が仕事が忙しいため返信が遅いのはそのためかもしれません。
  • 彼が手を繋いだり頭をポンポンとするのは友達感覚である可能性がありますが、それでも毎月会うことができることを喜んでいるのかもしれません。
回答を見る