首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

堆区delete疏失

2013-01-05 
堆区delete出错看代码如下CxImage *pCximage new CxImage()//pCximage-Load(strFileName)//pCximage-

堆区delete出错
看代码如下

CxImage *pCximage = new CxImage();
//pCximage->Load(strFileName);
//pCximage->Destroy();
delete pCximage;


使用了动态链接库 CxImageu.lib。 CxImage即定义于此。
该两行代码中间不插任何代码都会出错。
注释行中的语句可以正常执行,但是当delete的时候还是会出错。
百思不得其解。 求前辈给一个思路指导,是什么原因可能造成这种问题呢?
[解决办法]
可能是CxImage的析构函数在你的exe空间执行的有问题吧。

对于dll里面的对象,一般都是让dll自己负责创建和销毁的,对外是提供接口。很少有在代码里直接new对象的。
[解决办法]
调用DLL并且涉及到动态申请、释放内存时,确保DLL与调用者的C运行时库是一样的。
VC里面的:菜单Project-Settings-C/C++-Code Generation-Use run-time library,选择Multithreaded DLL,或者选其他试试。
VS里面的:菜单项目-属性-配置属性-C/C++-代码生成-运行时库,选择多线程DLL,或者选其他试试。
有结果了,不忘回复结帖,给后来者一个警告。
[解决办法]
我手里也有7的源码,代码一点问题都没有,按你的代码,free根本不会被调用。不过你得地址确实是调用free了,我就开始瞎猜了。

一个可能,就是有人改变了那几个成员变量的指针,还是有人往里面写东西了。

还一个可能,就是那两个掐起来了,谁都想hook掉malloc的东西,然后,就是你在new的时候已经出问题了。
返回了东西,但是具体的还没搞定,他俩还在掐呢,这时候你free,就挂了(确实不靠谱,你试一下呗,就当帮我试一下,咱们看看现象,呵呵呵)
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

热点排行