LPTSTR lpChar = strJpnRule.GetBuffer(strJpnRule.GetLength());
while(*lpChar){
char *pNext = lpChar + strcspn(lpChar, "|");
if((pNext > lpChar)&&(*pNext == '|')){
char cKeep = *pNext;
*pNext = 0;
RuleArray.Add(lpChar);
*pNext = cKeep;
lpChar = pNext + 1;
}else if (*lpChar){
lpChar += strlen(lpChar);
} }在這裡RuleArray.Add(lpChar)总是出错。有时候在STRING的Left()、Mid()、+=等函数那里出错。
都是系统函数申请空间错误、我检查了下 New 和 delete 、也没有发现什么错误。望高手指点一二。
出错原因如下:
_heap_alloc_base(unsigned int 0x00000050) line 200
_heap_alloc_dbg(unsigned int 0x0000001f, int 0x00000001, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 378 + 9 bytes
_nh_malloc_dbg(unsigned int 0x0000001f, int 0x00000000, int 0x00000001, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 248 + 21 bytes
_malloc_dbg(unsigned int 0x0000001f, int 0x00000001, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 165 + 27 bytes
operator new(unsigned int 0x0000001f, int 0x00000001, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 373 + 21 bytes
operator new(unsigned int 0x0000001f, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 65 + 19 bytes
CString::AllocBuffer(int 0x00000012) line 118 + 19 bytes
CString::AllocBeforeWrite(int 0x00000012) line 202
CString::AssignCopy(int 0x00000012, const char * 0x01e53204) line 315
CString::operator=(const char * 0x01e53204) line 346
CStringArray::SetAtGrow(int 0x00000000, const char * 0x01e53204) line 233
CStringArray::Add(const char * 0x01e53204) line 242
while(*lpChar){
char *pNext = lpChar + strcspn(lpChar, "|");
if((pNext > lpChar)&&(*pNext == '|')){
char cKeep = *pNext;
*pNext = 0;
RuleArray.Add(lpChar);
*pNext = cKeep;
lpChar = pNext + 1;
}else if (*lpChar){
lpChar += strlen(lpChar);
} }在這裡RuleArray.Add(lpChar)总是出错。有时候在STRING的Left()、Mid()、+=等函数那里出错。
都是系统函数申请空间错误、我检查了下 New 和 delete 、也没有发现什么错误。望高手指点一二。
出错原因如下:
_heap_alloc_base(unsigned int 0x00000050) line 200
_heap_alloc_dbg(unsigned int 0x0000001f, int 0x00000001, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 378 + 9 bytes
_nh_malloc_dbg(unsigned int 0x0000001f, int 0x00000000, int 0x00000001, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 248 + 21 bytes
_malloc_dbg(unsigned int 0x0000001f, int 0x00000001, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 165 + 27 bytes
operator new(unsigned int 0x0000001f, int 0x00000001, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 373 + 21 bytes
operator new(unsigned int 0x0000001f, const char * 0x006ee788 THIS_FILE, int 0x00000076) line 65 + 19 bytes
CString::AllocBuffer(int 0x00000012) line 118 + 19 bytes
CString::AllocBeforeWrite(int 0x00000012) line 202
CString::AssignCopy(int 0x00000012, const char * 0x01e53204) line 315
CString::operator=(const char * 0x01e53204) line 346
CStringArray::SetAtGrow(int 0x00000000, const char * 0x01e53204) line 233
CStringArray::Add(const char * 0x01e53204) line 242
解决方案 »
- drawtext为什么不显示
- 高分求救!!程序错误解决就给分
- 一个比较急的问题!!!!!!!
- ATL写的DLL控件无法被IE下载安装
- 当变换焦点时怎么自动保存?
- 如何将树结构保存到xml文档,反过来又从xml加载构建?????
- dwRemoteProcess == (DWORD)-1中DWORD不就是个类型吗,在这里是什么意思啊
- 关于 路径的显示
- 实现:MFC tab控件中各个Tab逐个使用settimer实时画图
- 98下使用RichEdit控件输入中文出现乱码,刷新后能正常显示中文,怎么解决??急!!
- 新手问题:如何反复打开多个表?
- 有谁开发手机短信发送程序(GSM设备),进来帮我瞧瞧,一个小问题
CArray<CString,CString> RuleArray;
CArray<LPTSTR,LPTSTR> RuleArray;//应该不是这种
LPTSTR lpChar = strJpnRule.GetBuffer(strJpnRule.GetLength());
strJpnRule.ReleaseBuffer();//你可以试试 while(*lpChar){
char *pNext = lpChar + strcspn(lpChar, "|");
if((pNext > lpChar)&&(*pNext == '|')){
char cKeep = *pNext;
*pNext = 0;
RuleArray.Add(lpChar);
*pNext = cKeep;
lpChar = pNext + 1;
}else if (*lpChar){
lpChar += strlen(lpChar);
} }
RuleArray的类型是 CStringArray
请问如何检查一下堆的分配?
比如说根据Heap corruption detected at 01E98BA8 找出这个01E98BA8是什么内容?
我就是把RuleArray里CString 数据拿出来 进行处理。
比如说 StrTemp = StrTemp.Mid(9)等操作、也不行吗?
最后RuleArray需要清除吗? 这个是局部变量不需要清除吧!如果清除
RuleArray。RemoveAll()就可以吧、里面元素没有New出来的。
===================改成
LPTSTR lpChar = new char[strJpnRule.GetLength()+1];
_tcscpy(lpsz, strJpnRule);
最简单的LPTSTR lpChar = (LPTSTR)(LPCTSTR)strJpnRule;
这个在这里也不能用。
LPTSTR lpChar = new TCHAR[strJpnRule.GetLength()+1];
_tcscpy(lpsz, strJpnRule);