关于释放new分配的空间

来源:百度知道 编辑:UC知道 时间:2024/05/13 18:09:02
char *func()
{
char *a=new char[20];
strcpy(a,"abcdef");
return a;

}

int main()
{

char *b=func();
cout<<b<<endl;
delete []b;
cout<<b;
system("pause");
}

上面这个程序里
我把函数里a分配的内存地址返回给b
然后delete b就可以释放a分配的空间了是吧?

那么下面的为何delete b就不能释放a分配的空间呢

int main()
{
char *a=new char[20];
strcpy(a,"abcdef");
cout<<a<<endl;
char *b=a;
cout<<b<<endl;
delete []b;
cout<<a;
system("pause");
}

一样释放了啊~~

如果你的意思是cout<<a之后依然打印出abcdef的话,那是因为在delete []b之后没有立即冲掉原来在a位置的数据而已~~
实际上,a已经成了垃圾指针。~

在VS2008下面实践如下:
abcdef
abcdef
葺葺葺葺葺葺葺葺葺葺葺葺请按任意键继续. . .

可以看到在内存释放之后a已经成为了野指针。。。无效的,这是危险的。
如果你还能看到字符串,只能说明你的编译器还不是很好。