为什么release会崩溃的程序,release的调试模式却不崩溃。
我写了一小段代码来看程序遇到非法操作的时候如何崩溃。
我new了一个C的对象,操作它的pi数组的时候故意越界,覆盖了pm指针。
因此通过pm指针调用m*对象的时候,因为this指针是非法的,所以运行崩溃了,在release模式下。
但是我发现在release模式下也可以F5调试,这种情况下无论如何也不会崩溃。我看打印出来的指针分配的大小和偏移量,和我直接release运行的值是一样的。
我知道debug模式分配内存会有很多前后保护的空间,奇怪的是为什么release模式调试的时候不会崩溃呢?
源代码如下:
#include "stdafx.h"#include <algorithm>class C{public: C(){ nCount=3; pi=new int[1]; } ~C(){delete [] pi;} int *pi; int nCount;};class my{public: int k; my():k(2){} virtual int GetK(){ return k; }};int main(void){ C* pc=new C;//new+构造函数可否带初始化列表 my* pm=new my; auto len=std::distance(pc,(C*)pm); printf("%p,%p,%p\n",pc,pm,&(pc->pi[len])); pc->pi[len]=0;//覆盖了pm! int kk=pm->GetK();//这句话会导致崩溃。但是release模式调试不崩溃,debug更不崩溃 //printf("%d\n",kk); delete pm; delete pc; return 0;}