メモリーリーク?

解決


たく  2006-09-18 12:01:53  No: 63034  IP: 192.*.*.*

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

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 13:25:37  No: 63035  IP: 192.*.*.*

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

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

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

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

編集 削除
たく  2006-09-18 17:36:57  No: 63036  IP: 192.*.*.*

Banさま

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

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

編集 削除