メモリーリーク?

解決


たく  2006-09-18 21:01:53  No: 63034

たびたび、お世話になります。

Debugモードで、forループをブレイクしながらトレースすると
_AFX_INLINE TCHAR CString::operator[](int nIndex) const
{
        // same as GetAt
        ASSERT(nIndex >= 0);
        ASSERT(nIndex < GetData()->nDataLength);
        return m_pchData[nIndex];
}
のような、アサートがかかります。

ブレイクしないで実行すると
Debug Assert Failed
File: afx.inl
Line: 177
の警告の後
イミディエイトウィンドウに

Detected memory leaks!
Dumping objects ->
strcore.cpp(118) : {9495} normal block at 0x00434870, 59 bytes long.
 Data: <    .   .   4330> 01 00 00 00 2E 00 00 00 2E 00 00 00 34 33 33 30 
strcore.cpp(118) : {9449} normal block at 0x00434950, 36 bytes long.
 Data: <            C0HU> 01 00 00 00 17 00 00 00 17 00 00 00 43 30 48 55 
のメッセージが出力されます。

このエラーはやはりメモリーリークを起こしていると言うことでしょうか?

newした変数はすべてdelete処理しているようなんですが

よろしく、お願い致します。


Ban  2006-09-18 22:25:37  No: 63035

最初のアサーションは、インデクスの範囲外参照です。
つまり、触ってはいけない範囲の外を参照したってことです。

で、その時点でデバッグを中断したのだとしたら、
正しい終了処理を通らないためリークのように見える"可能性があります"。

つまり、まず範囲外参照するバグを直し、その後に、まだリークしているかを
確認しないと、現時点の情報では、メモリリークか否かはコードも見ていない
外野には判断不可能です。

> CString::operator[]
とのことなので、文字列を[]で操作したりしてると思いますが、
そこにバグがあります。文字の長さより長い位置をいじってるとか、
殻の文字列なのに操作しようとしてるとか…。そういうのをまず直してください。


たく  2006-09-19 02:36:57  No: 63036

Banさま

Assertエラーは苦手です (^^;

ありがとうございましいた。
解決できました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加