大家都知道,static变量,内容在堆中分配的,new来的对象也是堆中分配的,
那么,如果在cpp中删除一个静态局部变量,后果是什么?
编译错误?还是运行错误?
比如下面的aTest函数,能运行吗?
#include <iostream>
using namespace std;
int aTest()
{
static int a=0;
int *b=&a;
delete b;
return a++;
}
int main(int argc,char** argv)
{
for(int i=0;i<100;i++)
{
cout<<aTest()<<endl;
}
return 0;
}
事实是,
在gcc下,无论debug还是release,都没有问题,
在vc下,debug会报assert错误,release没有问题。
那cpp下,内存管理是谁做的?编译器为什么让它过去了呢?
其实,个人感觉,也就是上面的内存操作并不多,复杂情况下,早就挂了。