为什么windows下没有double free 异常
我有一个简单的c++代码演示double free 异常,在linux下面会按照我所期待的那样抛出异常,但在Windows下(QTCreator)没有任何异常:
double?free
#include <stdio.h>
class BitWiseCopyClass {
public:
BitWiseCopyClass(){m_data= new int;};
~BitWiseCopyClass(){
delete m_data ;
}
private:
int* m_data;
};
void test(){
BitWiseCopyClass objA;
BitWiseCopyClass objB;
objB = objA;
// 结果导致 objA 和 objB 的指针都指向了同一个地址
// 函数结束析构时
// 同一个地址被delete两次, 所以会抛出double free异常,但在windows下没有抛出任何异常
}
int main()
{
test();
printf("done\n");
return 0;
}
//申请空间于堆上,释放空间会异常,而栈上没有异常
//同求原因吧...
class BitWiseCopyClass
{
public:
BitWiseCopyClass(){m_data= new int;};
~BitWiseCopyClass()
{
delete m_data ;
}
private:
int* m_data;
};
int main()
{
BitWiseCopyClass *objA =new BitWiseCopyClass;
BitWiseCopyClass *objB =new BitWiseCopyClass;
objB = objA;
delete objA;
delete objB;
printf("done\n");
return 0;
}
BitWiseCopyClass objB;
objB = objA;
在windows下面这个指向的不是同一地址!
[解决办法]
抛出 double free 异常 是一个确定的行为
你写了行为未定义的代码却去期待一个确定的行为.这是错的.
[解决办法]
用Visual Studio构建,执行得到的exe的时候直接被杀毒软件干掉。。。。。
[解决办法]