delete[]结果引发异常

[复制链接]
1506|22
 楼主| yinxiangh 发表于 2016-12-4 21:44 | 显示全部楼层 |阅读模式
线程中使用该字符串,然后delete[],结果引发异常
pengf 发表于 2016-12-4 21:46 | 显示全部楼层
断点调试一下吧
renyaq 发表于 2016-12-4 21:48 | 显示全部楼层
你的设置?
 楼主| yinxiangh 发表于 2016-12-4 21:50 | 显示全部楼层
工程设置:Debug multithread DLL(/MDd)改用GlobalAlloc/GlobalFree依然无济于事。
 楼主| yinxiangh 发表于 2016-12-4 21:54 | 显示全部楼层

我认为CyUSB.lib可能静态链接到了CRT库,而我的版本是使用动态链接。
houcs 发表于 2016-12-4 21:55 | 显示全部楼层
改下工程设置
 楼主| yinxiangh 发表于 2016-12-4 21:58 | 显示全部楼层

设置为“静态使用MFC、使用CRT库的多线程非DLL版本”,依然会报错。
 楼主| yinxiangh 发表于 2016-12-4 22:01 | 显示全部楼层
在VC6中一切正常。
pangb 发表于 2016-12-4 22:03 | 显示全部楼层

是否存在SendCommand中没有运行case CONFIG_EMULATOR:里面的语句就到后面创建函数的代码啦的情况
chenjunt 发表于 2016-12-4 22:06 | 显示全部楼层
估计与Unicode字符集有关,你把项目改成多字节字符集验证一下。
ousj 发表于 2016-12-4 22:08 | 显示全部楼层
对,另外再调试一下,开一个内存窗口,监视从lpszPathName-0x20开始的内存,看看执行过程中是否发生变化。
morrisk 发表于 2016-12-4 22:10 | 显示全部楼层
建议好好看一下CCyUSBDevice的说明文档。
zyf部长 发表于 2016-12-4 22:11 | 显示全部楼层
你要delete的指针是在SendCommand中由CCyUSBDevice作为参数传给你的,我说的没错吧。
小小猫咪 发表于 2016-12-4 22:15 | 显示全部楼层
那么你知道这个指针在CCyUSBDevice中是如何创建的?
zwll 发表于 2016-12-4 22:17 | 显示全部楼层
至少你怎么知道要用delete []而不是delete?
chuxh 发表于 2016-12-4 22:19 | 显示全部楼层

甚至可能你根本不用自己释放,CCyUSBDevice会自己释放。
juventus9554 发表于 2016-12-4 22:21 | 显示全部楼层
一个很重要很容易出你这种问题的做法是在dll中分配内存在exe中释放,这是非常不推荐的
 楼主| yinxiangh 发表于 2016-12-4 22:22 | 显示全部楼层
为什么啊?
司徒老鹰 发表于 2016-12-4 22:25 | 显示全部楼层
在dll中提供释放的函数供exe调用,也就是分配和释放都要在一个dll中进行
llljh 发表于 2016-12-4 22:27 | 显示全部楼层
void* CCyUSBDevice::Alloc()
{
return new char[20];
}
void CCyUSBDevice::Release(void *p)
{
delete [] p;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

723

主题

7134

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部