程序中使用了大量的CString类.但是在连续运转大约20个小时侯后,在debug模式下提示如下错误:
断言失败
...\atlmfc\include\atlsimpstr.h
line 791
Excpression:nLength<=GetData()->nAllocLength
我查找了对应的文件,抛出异常的是CString类的SetLength方法.///////////////////////////////////////////////////////////
但是我程序中根本没有使用SetLength.只使用了Mid,Left,Right,+,GetBuffer(20),ReleaseBuffer(),=这些操作.
请问这些操作中哪个操作会底层调用SetLength,出现这个问题最有可能是那里处理不当?
断言失败
...\atlmfc\include\atlsimpstr.h
line 791
Excpression:nLength<=GetData()->nAllocLength
我查找了对应的文件,抛出异常的是CString类的SetLength方法.///////////////////////////////////////////////////////////
但是我程序中根本没有使用SetLength.只使用了Mid,Left,Right,+,GetBuffer(20),ReleaseBuffer(),=这些操作.
请问这些操作中哪个操作会底层调用SetLength,出现这个问题最有可能是那里处理不当?
解决方案 »
- vc listCtrl
- 如何利用声卡实现数据传输!!!!!
- 隐藏splitter窗口分割线 之后的问题!!!!
- 请教CString转换问题
- 请专家讲解 IHTMLElementCollection::item 和 IUnknown::QueryInterface 的使用和参数的设定。
- 关于 GetStdHandle
- 如何取得对话框中一个CStatic控件的CWnd指针
- MDI窗口中下面这个事件好象永远不会发生??
- 为何不能在线程中调用视图类的UpdateData(FALSE)更新数据?
- 一个简单问题,先来先得分。
- 求助:关于用ADO备份和恢复Sql Server数据库问题
- 要实现在程序中打开一个.TXT的文件,并将其显示在程序的最前端,怎么实现
GetBuffer后没有ReleaseBuffer需要一一对应
GetBuffer以后一定要ReleaseBuffer();说不好听的就象拉了屎自己要打扫一样.....这就是C++的优势----相信程序员.
而Java不一样,他不相信拉了屎的人会自己打扫,所以就出现了所谓的"垃圾回收"...
我想请问这样做会不会有潜在问题:
int PP::cc()
{
CString m_str;
m_str="";
....
m_str="fdsdfsf";
return 0;
}
CString木有SetLength方法只有GetBufferSetLength
//////////////////////////////////////////////////...\atlmfc\include\atlsimpstr.h
line 791
Excpression:nLength<=GetData()->nAllocLength
以下是错误提示中给出的文件中对应的代码
///////////////////////////////////////////////////
void SetLength( int nLength )
{
ATLASSERT( nLength >= 0 );
ATLASSERT( nLength <= GetData()->nAllocLength );////这里是791行,此处抛出的异常 if( nLength < 0 || nLength > GetData()->nAllocLength)
AtlThrow(E_INVALIDARG);
GetData()->nDataLength = nLength;
m_pszData[nLength] = 0;
}