• 締切済み

システム領域で起こるメモリリーク

メモリリークを起こしているのはシステム領域で、ユーザ領域は正常です。 処理の概要はディレクトリパスをDBから取得(Pro*C)し、そのディレクトリ内のファイルを削除(remove関数)するです。 Cの関数でシステム領域のメモリを確保するものはあるのでしょうか?ご存知の方がおられるなら回答お願いします。

みんなの回答

  • z64423
  • ベストアンサー率53% (26/49)
回答No.1

システム領域(カーネル内)でメモリリークしていることを、 どうやって調べたのでしょうか。 それとも、カーネルではなくシステムライブラリ(DLL等)で メモリリークしているという意味でしょうか。 _ もし本当にメモリリークしているのであれば、 OSやデバイスドライバをアップデートするか、もしくはバグ報告して 修正依頼するのがよいと思います。 アップデートが無く、かつ、いますぐ対策が必要だというのであれば 問題のある(ありそうな)API "以外"を使って、同等の機能を 実装するほうが良いと思います。 カーネル拡張(?)として自分でデバイスドライバを書くことは可能 ですが、あまり賢い方法とは思いません。 ※本当にそれしか対応策がない場合は止むを得ないでしょうが、  いちばん遠回りになりそうな気がします。 ちなみに、通常のAPI(OSが提供するものや C標準ライブラリ等)で、 カーネル内に領域確保できるものはありません。

関連するQ&A

  • c言語のメモリリークについての質問

    c言語のメモリリークについての質問 c言語初心者のため、メモリリークについて質問させていただければと存じます。 下記のコードで、 char* char_p = "char1"; char_p = "char2"; // ←メモリリーク? 2行目の部分は、 "char1"のメモリ領域が確保されたままで、解放できなくなってしまうので、 メモリリークを起こして問題な気がするのですが、実際はどうなのでしょうか? よろしくお願いいたします。

  • メモリリークについて

    VC6.0でデバッグ実行すると Detected memory leaks! Dumping objects -> ソースファイル名(932) : {136739} normal block at 0x00FD4AC0, 0 bytes long. Data: <> メッセージがあり メモリがリークしているようです メッセージやソースから察するに 0バイトの領域を確保し それを解放したときに起こっているようです 領域をmallocして 解放ではNULLでなければ解放 という処理はしてはいけないことなのでしょうか 0バイトの領域を確保した場合 又は0バイトの領域を確保しないように 処理しないといけないのでしょうか? 知識のある方よろしくお願い致します

  • メモリリークの質問です。

    メモリリークの質問です。 それぞれ100程のデータが入っている配列を4つほど利用し、「array_key」関数を使用してキーのデータを抽出する関数を作成致しました。 その関数を、1日300ユーザ程が利用します。 <質問> メモリリークが起こる可能性はあるのでしょうか? (サーバーのメモリは、8Gほどあります) また、何かしらメモリの不具合で配列にデータが入らずに「array_key」で検索することができないというようなことはありますでしょうか? 以上、何かアドバイスが御座いましたら、教えて頂けますでしょうか。よろしくお願い致します。

    • ベストアンサー
    • PHP
  • std::wstringのメモリリークについて教えてださい

    C++でプログラムを書いていたところメモリリークしているのを発見しました。 そこでなんとかメモリリークしている箇所を特定してみたのですが、なんとstd::wstringとstd::stringがメモリリークしているようです。 (UNICODEとマルチバイト文字に対応させるため両方でプログラムかいています) ローカル変数で関数さえ抜ければメモリからは消滅するはずのstd::wstringやstd::stringがメモリリークしているのは何か原因でもあるのでしょうか? よろしくおねがいします。

  • アプリをシステムメモリ領域に戻す方法

    こんにちは。 システムメモリが一杯になったので、ユーザー領域に移したところ、 ウィジェット系やGmail等のアプリの動きが悪くなってしまいました。 そこでシステムメモリに、必要なアプリだけ戻そうと思っていましたが、戻し方がわかりません。 どなたかやり方をご存知の方がいらっしゃれば、よろしくお願い致します。 以上です。

  • メモリリーク

    メモリリークに関する質問です。 現在稼動しているサーバーについてなのですが、メモリの使用量が実際に搭載しているメモリ量を超えてスワップが発生してしまっています。一日当り数MBのメモリが消費されてしまっているようなのですが、タスクマネージャー上ではそんなに増えているアプリケーションはありません。 プリンタドライバが悪さをしているとの話もあるのですが、調査の仕方がわからず困っています。 まずはこれがメモリリークなのかどうかがよくわからないのですが、調査方法等ご存知の方、知恵を貸してください。よろしくお願いいたします。 【ちなみに環境は】 ・Windows2000Server ・ORACLE9.0.1 ・プリンタ用のパッケージ ・VC++及びVBにて開発 【こんなシステムです】 ・一日に1400枚程度の紙を印字 ・RS232Cを使用して他のコンピュータと通信を  一日に1400回程度行っている  (1回あたり256バイト)

  • フリーズとメモリリークについて

    最近になって頻繁にフリーズするようになりました。 アプリケーションログを見てみるとメモリリークの可能性と言うのがありました。 以下コピペです。 >メモリ リークの可能性があります。アプリケーション (C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted) (PID: 1100) が、[allocate(all_nodes)] とマークされた [out] パラメーターの NULL でないポインターを RPC に渡しました。[allocate(all_nodes)] パラメーターは常に再割り当てされるので、元のポインターに有効なメモリのアドレスが含まれていた場合、そのメモリがリークします。呼び出し元はインターフェイス UUID ({3f31c91e-2545-4b7b-9311-9529e8bffef6})、メソッド番号 (20) です。対処方法: アプリケーションの製造元に問い合わせて、アプリケーションの更新バージョンがないか確認してください。 と、書いてあるのですがどうしたらいいのでしょうか。 後、「めもりーくりーなー」という物も常駐させてみたのですがあまり効果はないみたいです… スペックはWindows7、メモリ3Gです。 どうかよろしくお願いします。

  • 動的なメモリ領域の確保

    double型変数5個分のメモリをmalloc関数により確保し,その確保した要素のアドレスを表示するように,プログラムを作る問題で、 (注)に「 %pで表示するためには,double型へのポインタ(double *)をvoid型へのポインタ(void *)にキャストする必要がある.」と書かれていたのですが、どういうことでしょうか? 以下のようでいいのでしょうか? #include<stdio.h> #include<stdlib.h> #define COUNT 5           // 動的に確保するメモリ領域数を示すマクロ定数の定義 int main(void) {  // 動的に確保するメモリ領域のアドレスを保持するポインタ変数の宣言  double * pointer;  int i;                  // for文で使用する変数の宣言  // int型変数5個分のメモリ領域を確保  pointer = (double *)malloc(sizeof(double) * COUNT);  if(pointer == NULL) {        // メモリ領域の確保が失敗した場合   printf("メモリ領域を確保できませんでした.\n");   exit(1);                // プログラムの終了  }  for(i = 0; i < COUNT; i++)   printf("%d番目のアドレスは%pです.\n", i + 1, pointer + i);  free(pointer);            // 確保したメモリ領域の解放  return 0; }

  • C言語のメモリ領域確保

    ポインタ変数ををmain関数で宣言し、関数test()にて必要分だけ領域確保してそのアドレスをmain関数のポインタ変数に渡して利用することは可能でしょうか。 (サイズのわからないテキストデータを、十分に大きな配列に入れるのではなく、関数でメモリを動的確保して無駄の無い配列に入れたい等) C言語ではやはり無理で、構造体のリストにするのが一番でしょうか。 初歩的なことで申し訳ありませんがどなたかお願いいたします。

  • ポインタを引数に渡してメモリ領域をとる

    C++でアプリケーションを作っています。 メモリ領域を動的に確保するコードを書いているところなのですが、 int *pr; // ポインタ kakuho(pr,100); // 新たにメモリ領域int100個分確保し、先頭番地をprに返す関数 というコードを作りたいのですが、 kakuho(int *pr,int num){ pr=new int[num]; return; } このようなプログラムを書いてVisual C++.NETでコンパイルすると、コンパイルは成功するのですが、実行時に Run-Time Check Failure #3 - The variable 'pr' is being used without being defined. このメッセージの意図することがよくつかめぬまま、ここで開発が止まっています。 どういう意味なのか、また、解決するにはどのようにしたらよいか教えてください。

専門家に質問してみよう