发新帖我要提问
12
返回列表
打印

_CrtIsValidHeapPointer失败

[复制链接]
楼主: zhuww
手机看帖
扫描二维码
随时随地手机跟帖
21
hanwe| | 2010-11-25 23:15 | 只看该作者 回帖奖励 |倒序浏览
改用Multi-Byte测一下

使用特权

评论回复
22
zhuww|  楼主 | 2010-11-25 23:35 | 只看该作者
刚刚又测试了一下,改用Multi-Byte,跟踪发现,,_CrtMemBlockHeader::pBlockHeaderPrev在准备释放之前,也是被改变了的,但是此时delete[]一切正常

使用特权

评论回复
23
zhuww|  楼主 | 2010-11-25 23:36 | 只看该作者
我认为,_CrtMemBlockHeader::pBlockHeaderPrev被改变或许是正确的行为,但是为什么UNICODE环境下delete[]会失败呢?

使用特权

评论回复
24
llia| | 2010-11-26 20:36 | 只看该作者
那跟CyUSB.lib有什么关系,建议你把分配和释放的代码都贴出来,你现在贴的不全,分配的地方没有贴。

使用特权

评论回复
25
lium| | 2010-11-27 10:39 | 只看该作者
LPTSTR lpszPathName = new char[_tcslen(lpszConfigFile)+1];
debug模式下的delete会检查释放的内存并将其填入0xcc。

使用特权

评论回复
26
guoyt| | 2010-11-27 10:43 | 只看该作者
pBlockHeaderPrev改变是正常的,你再检查一下是否存在越界问题,可能某个地方计算字符串的长度出错了。
另外,也可能是你使用的lib在处理Unicode时存在问题。

使用特权

评论回复
27
zhuww|  楼主 | 2010-11-27 10:53 | 只看该作者
那跟CyUSB.lib有什么关系,建议你把分配和释放的代码都贴出来,你现在贴的不全,分配的地方没有贴。
llia 发表于 2010-11-26 20:36
分配的地方已经贴了。

使用特权

评论回复
28
zhuww|  楼主 | 2010-11-27 10:54 | 只看该作者
之所以提到CyUSB.lib,是因为该lib导出了一个类CyUSBDevice,我的类CEmuDevice继承自此类,CyUSB.lib是一个静态的library,而我的工程是/MDd的,故我怀疑是因为link到了不同的CRT库,导致在不同的堆,检查失败。

使用特权

评论回复
29
zwll| | 2010-11-27 11:15 | 只看该作者
LPTSTR lpszPathName = new char[_tcslen(lpszConfigFile)+1];
debug模式下的delete会检查释放的内存并将其填入0xcc。
lium 发表于 2010-11-27 10:39
在释放之前就出错了。DEBUG版本下,释放之前会进行堆校验,就是在这里出错的。故我想和填入0xCC没有关系。

使用特权

评论回复
30
guoyt| | 2010-11-27 11:25 | 只看该作者
unicode下LPCTSTR 和LPTSTR是不同的,需要进行转换。

使用特权

评论回复
31
zhuww|  楼主 | 2010-11-27 11:42 | 只看该作者
pBlockHeaderPrev改变是正常的,你再检查一下是否存在越界问题,可能某个地方计算字符串的长度出错了。
另外,也可能是你使用的lib在处理Unicode时存在问题。 ...
guoyt 发表于 2010-11-27 10:43
似乎不存在越界,我的程序对lpszPathName指向的内存的处理流程很简单,就是在UI线程中new,传递给worker thread,worker thread调用CEmuDevice的一个成员函数对字符串所表示的文件进行处理(该字符串表示了一个文件的路径),随即就delete[]之。

使用特权

评论回复
32
zhuww|  楼主 | 2010-11-27 11:43 | 只看该作者
经过跟踪,该字符串在new之后,delete之前,并没有发生变化,唯一的变化就是pBlockHeaderPrev改变了。

使用特权

评论回复
33
llia| | 2010-11-27 12:01 | 只看该作者
可以先注释掉一部分代码,确定问题与哪里的代码有关。

使用特权

评论回复
34
langgq| | 2010-11-27 20:38 | 只看该作者
我相信你说的lib在处理UNICODE的时候出了问题,但是我一时没有头绪,想不出哪里会出问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则