98でメモリ開放しない – プログラミング – Home

98でメモリ開放しない
 
通知
すべてクリア

98でメモリ開放しない


ちゅん
 ちゅん
(@ちゅん)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

今Bitmapファイルを操作するものを作っているのですが、
98で実行するとメモリを開放してくれないという現象に悩んでいます
デバックの結果CreateDIBSectionで作成したHBITMAPクラスを
DeleteObjectにて削除しているのですが、DeleteObject後も
システムリソースでの確認ですが、減少せず増えたままになっています

ちなみにコードは以下のように記載しているのですが、XP/2000では
きちんと動作していました。

98でのみメモリの開放をおこなってくれないのは何かやるべきことが抜けている
のしょうか?

HBITMAP   m_hBitmap;
BITMAPINFO  *pbmi;
BYTE*   m_pBits;
CBitmapInfo bmInfo;
~中略~
//生成

m_hBitmap = ::CreateDIBSection(NULL , pbmi , DIB_RGB_COLORS , (void **)
&m_pBits , NULL , 0);

~中略~
//開放
if(m_hBitmap)
 ::DeleteObject(m_hBitmap);

m_hBitmap = NULL;


引用解決済
トピックタグ
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 23年前
投稿: 196
 

s/開放/解放/g

提示されたコード片には、特に問題無さそうです。

他にチェックするべき点は

・DeleteObject() を必ず通過しているか
・m_hBitmap をどこかのDCに SelectObject() しっぱなしにしていないか

くらいでしょうか。


返信引用
ちゅん
 ちゅん
(@ちゅん)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

早速のお返事ありがとうございます

もしSelectObject()しっぱなしの場合でDeleteObjectした場合、
XP/2000では開放してくれるのでしょうか?

XP/2000では動作したので、SelectObject()部分は大丈夫だと
判断してしまっていました。チェックしてみます。


返信引用
Tonny
 Tonny
(@Tonny)
ゲスト
結合: 23年前
投稿: 32
 

以前、win98でアプリを作っていた時、リソースメータ(でしたっけ?)で
DIBの開放を確認しようとしたのですが、使用メモリは減りませんでした。
MDSNのサンプルの読み込み部分をそのまんまコピーしてきた様なプログラム
だったのですが。

でも、連続していろいろなBMPファイルを読み込み、開放を繰り返しても
メモリ使用量がどんどん増えていくことはありませんでした。
(若干増えることはありましたが、リニアに上澄みされていっている
様子はありませんでした。)
で、リソースメータってそういうものなのかなあと思い、無視していました。
後にwin2000で同じプログラム(リビルドはしたかも)をタスクマネージャで
みるとちゃんと減っていましたので、絶対開放している自信があれば、
気にしなくてもいいのかもしれません。

(でも、自信も確証もありませんが)


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

Win95,98,Me と WinNT,2K,xp とは同じ Win32 API が使えますがそれだけの事です
(片方にしかない API もあれば、動作が異なるものもあるが、ほぼ同様に使えるものが多い)
とくに、Win95 の仲間は 16bit アプリケーションの動作で問題があまり起きないように
配慮しているためなのかまたはメモリー周(まわ)りの実装が異なっているためなのか
どうかは分りませんが、リソースメーターではメモリーやリソースやを解放した事が直ち
には反映しないようです。Win96 系列ではアプリケーションが終了してもメモリーや
リソースが減らないようだと問題だと判断するようにしています

ちゅんさん、開放と解放とが違うことはわかりますね?
一度注意されているのですから気をつけましょうね


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました