- ベストアンサー
メモリの開放を全て行いたいが開放し損ねている VC++6.0 使用
こんにちは。 Win2000環境 VC++6を使用してあるアプリケーションを開発してまして そのアプリ終了時に、確保したメモリを開放しているのですが 「すべてのメモリを開放できませんでした」というような表示がされてしまいます。 (この表示文字自体は、そのアプリの仕様です。エラーチェックしてくれています) 自分ではmallocしたデータは全て開放しているつもりですが どのメモリ(変数)が開放し損ねているのかわからずに困っています。 VCのデバッグモードを使用して処理をたどってみても、場所が特定できません。 mallocしている部分をコメントアウト等して ちょっとづつでも場所を特定できればいいのですが、 諸事情により(プログラムの処理上)それができない形になっています。 皆さんは、メモリを開放させる処理で、どこかメモリを開放し損ねている場合 どのようにその場所を突き止めているのでしょうか? VC++のデバッグモードの何かしらの機能か何かで その場所を表示させるような事なのできないのでしょうか? ちょっとわかりにくい説明ですが、 ご存知の方、どうぞよろしくお願い致します。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (6)
- RAPTsong
- ベストアンサー率42% (74/175)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
- txrx
- ベストアンサー率45% (83/184)
- keyguy
- ベストアンサー率28% (135/469)
- mcWalker
- ベストアンサー率69% (27/39)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
関連するQ&A
- メモリの開放について
いつもお世話になっております。 メモリ開放のお作法について教えてください。 int* p ; p = (int*)malloc( 100 * sizeof( int ) ) ; ※ p = (int*)malloc( 100 * sizeof( int ) ) ; ※ p = (int*)malloc( 100 * sizeof( int ) ) ; free(p); このような記述をした場合、※の付いている2行でメモリ確保した 領域は開放されるのでしょうか。 (メモリ確保に失敗した場合の処理は省略してます。) よろしくお願いします。
- ベストアンサー
- C・C++・C#
- mallocしたメモリの開放
かなり基本的なことですいませんが、 下記のようなイメージのコードで確保したメモリを 確実に開放するにはどうしたらいいでしょうか? やりたいこととしては、動的に確保したメモリにデータを 入れて、それをベクトルに入れて使いまわしたいです。 下記のコードからfreeの部分をやめても大丈夫でしょうか?その場合、どうやってメモリ開放するんでしょうか? ベクトルが消滅すればメモリが開放されるんでしょうか? テストしてみましたが、減った気配がない。。。 根本的に考え方がおかしいかもしれません。。。 お助けください。 お願いします。 wchar_t str[6] = L"あいうえお"; wchar_t* mem = (wchar_t*)malloc(6 * sizeof(wchar_t)); wcsncpy(mem, str, 6); std::vector<wchar_t*> vetorTemp; //実際グローバル変数 vetorTemp.insert(vetorTemp.end(), mem); free(mem); // ここで開放するとvetorTempの中身も利用できなくなってしまった
- 締切済み
- C・C++・C#
- メモリ確保エラー時の効率的な書き方
mallocなどで複数の変数に対してメモリを確保する場合があると思います.例えば3つの変数の場合, char *a, *b, *c; a = (char *)malloc(100); if(a==NULL){ /* メモリ確保できなかったとき */ return (-1); } b = (char *)malloc(100); if(b==NULL){ free(a); return (-1); } c = (char *)malloc(100); if(c==NULL){ free(a); free(b); return (-1); } 変数が多くなるにつれて後から確保する変数のエラー処理(すでに確保したメモリのfree)が増えてしまうので,何か良い方法(コードが短くなるような)はないでしょうか?
- ベストアンサー
- C・C++・C#
- メモリリークについて
VC6.0でデバッグ実行すると Detected memory leaks! Dumping objects -> ソースファイル名(932) : {136739} normal block at 0x00FD4AC0, 0 bytes long. Data: <> メッセージがあり メモリがリークしているようです メッセージやソースから察するに 0バイトの領域を確保し それを解放したときに起こっているようです 領域をmallocして 解放ではNULLでなければ解放 という処理はしてはいけないことなのでしょうか 0バイトの領域を確保した場合 又は0バイトの領域を確保しないように 処理しないといけないのでしょうか? 知識のある方よろしくお願い致します
- ベストアンサー
- C・C++・C#
- malloc関数 free開放とはなんですか?
malloc関数を用いてメモリを確保した後、 必ずfreeで開放を行わなければならないですよね? この開放とはどういう意味なのでしょうか?
- ベストアンサー
- C・C++・C#
- VC++6.0の混在モード
VC++6.0でデバッグ時に混在モードで表示されてしまいデバッグがスムーズにできません。 できればデバッグ時に混在モードを表示しないようにしたいのですが、そのような設定にできるのでしょうか?
- ベストアンサー
- C・C++・C#
- GDI+におけるメモリの開放について
C++でGDI+のコードを書いています。 たとえば Gdiplus::Bitmap bmp(1000, 1000); を一度呼ぶと、アプリケーションを終わらすまで確保した領域が開放されず、 繰り返し呼ぶと使用メモリがどんどん増えていってしまいます。 確保したBitmapを開放するにはどうしたらよいのでしょうか?
- ベストアンサー
- C・C++・C#
- c言語のmalloc関数、またrealloc関数
c言語のmalloc関数は確保するメモリの領域を、配列としてのみしか処理出来ないのですか。 つまり、malloc関数で確保したメモリの領域を変数、また多次元配列、また構造体としては処理出来ないのでしょうか。 c言語のrealloc関数は以前の確保したメモリの領域から、確保し直したメモリの領域の場所が変わるかもしれないという事ですが、この場合の場所が変わるという意味は、メモリの領域のアドレスが変わるという事でしょうか。 また、以前の確保したメモリの領域に代入していたデータが使用出来なくなるという事でしょうか。
- 締切済み
- C・C++・C#
- 自アプリ内のメモリを管理したい
こんにちは。 現在C/C++でプログラムを組んでいます。 C/C++でメモリを確保、開放するにはmalloc、new、free,deleteを使うわけですがアプリケーションが開始された時点で、ある一定のメモリを確保しておいてそのメモリから分け与えたりデフラグしたりして自分のアプリで使うメモリを管理したいと思っています。 BYTE* g_allMemory;//グローバル変数 g_allMemory = new BYTE[1024]; プログラムを実行した時点でこのようにメモリを確保しておき要所要所で自作関数を利用してメモリを分け与えたりデフラグしたりして使えるようにしたいのです。 しかしデフラグした瞬間に変数のアドレスがずれてしまって使い物になりません。 これを解決したいのですがアドバイスやお勧めのホームページや参考文献などがあったら紹介をお願いします。
- ベストアンサー
- C・C++・C#
- メモリ解放が必要な場合
基本的な質問です。mallocやreallocのときはfreeが必要といわれますが、ローカル変数でポインタ型の変数を宣言したときなどもfreeしてもいいのでしょうか?splintをかけるとmallocのように動的にメモリ確保してないのにメモリリークの可能性が。。。などとエラーがでてしまってどう対応したらよいか困っています。
- ベストアンサー
- C・C++・C#
お礼
返答が遅くなりましてすみません。 ご返答ありがとうございます。 重ねての質問で大変申し訳ないのですが、 このような定義をしたとして その後、どうやってメモリ管理できるのでしょうか? mymyMallocという関数を別途用意するのでしょうか? (その時、nameはどのように使用する?) 使いやすいようなイメージがするので ご教授頂けると幸いです。 どうぞよろしくお願い致します。