メモリリークについて – プログラミング – Home

通知
すべてクリア

[解決済] メモリリークについて


けい
 けい
(@けい)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

WinXP Pro / VC++7でMFCを使っていて質問です。
画像を処理するソフトを作っていまして、ボタンを押すと
保存結果をプレビューする機能を作ろうとしています。
すでに処理された画像があるバッファをプレビュー用のバッファにコピーして
別のピクチャボックスに描画しようとしているのですが…

ViewクラスのOnBnClickedPvButton()で、プレビュー用のバッファ
をnewで確保しているのですが、プログラム終了時に確保した分?メモリリークします。
処理自体はきちんとされていて、プレビューボタンを押した回数分メモリリークといわれ
ます。

以下にソースを抜粋します。ちなみにソース中の変数は
int bufsize…コピーする画像用のバッファサイズ
Byte *m_buf…処理された画像が入っているバッファ。このボタンが押すまでに確保され
てデータは入っている
Byte *m_pvbuf…プレビュー用のバッファ。ポインタはviewクラスで定義。ここでメモリ
を確保して開放もしたつもりなのに(T_T)

void CJpegView::OnBnClickedPvButton()
{
// m_pvbuf : プレビュー用バッファ
if (m_pvbuf!=NULL) {
delete [] m_pvbuf;
m_pvbuf=NULL;
}

//バッファコピー
m_pvbuf = (BYTE *) new BYTE[bufsize];//メモリリークはこの行がエラーと
言う

memcpy(m_pvbuf,m_buf,bufsize);

//以下省略
}
CJpegView::~CJpegView()
{
if (m_buf!=NULL) {
delete [] m_buf;
m_buf=NULL;
}
if (m_pvbuf!=NULL) {
delete [] m_pvbuf;
m_pvbuf=NULL;
}

}

ちょっと長くなりましたが、
何か参考になることがございましたら教えていただきたいのでよろしくお願いします。


引用未解決
トピックタグ
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

CJpegViewのデストラクタはどこで作用していますか?

リーク検出時にCJpegViewのインスタンスが存在していれば、
m_pvbufは開放されていないので、リークしている、と検出
されるかと思われます。


返信引用
けい
 けい
(@けい)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

お返事ありがとうございます。

>CJpegViewのデストラクタはどこで作用していますか?
現在SDIでFormViewで作っていますので
終了時に呼び出されていると思います。

プレビューボタン押した回数分メモリリークが多くなるので変だなと思ったら、
別のJpegを扱うライブラリと二重にメモリを確保していたようです。
そのため開放できないメモリができちゃったようです(>_<)

お騒がせしました。
回答していただいたRAPTさんありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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