#include "stdafx.h"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *p=new char [10];
p="012345678";
delete []p;
return 0;
}
这段程序如果不delete[]p则完全可以打印出cout<<p;原因在于"012345678"这是在常量区分配的,这样
就导致给P重新指向,这样的结果也就是说new char[10]的空间不能被p再指向,所以delete时肯定会出问题
因为new分配的是在堆上的。修改上面的程序
————————————————————————————————————————————————
#include "stdafx.h"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *p=new char [10];
char *q=p;
p="012345678";//如果想实现正常的赋值 可以用strcpy
cout<<&p <<" "<< &q;
delete []q;
int i;
cin>>i;
return 0;
}
此程序可以正常释放正确