たびたび、お世話になります。
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処理しているようなんですが
よろしく、お願い致します。
最初のアサーションは、インデクスの範囲外参照です。
つまり、触ってはいけない範囲の外を参照したってことです。
で、その時点でデバッグを中断したのだとしたら、
正しい終了処理を通らないためリークのように見える"可能性があります"。
つまり、まず範囲外参照するバグを直し、その後に、まだリークしているかを
確認しないと、現時点の情報では、メモリリークか否かはコードも見ていない
外野には判断不可能です。
> CString::operator[]
とのことなので、文字列を[]で操作したりしてると思いますが、
そこにバグがあります。文字の長さより長い位置をいじってるとか、
殻の文字列なのに操作しようとしてるとか…。そういうのをまず直してください。
Banさま
Assertエラーは苦手です (^^;
ありがとうございましいた。
解決できました。
ツイート | ![]() |