话不多说,代码说话: #include <iostream> using namespace std; int main() { int *p1 = new int; int *ptemp = p1; int a1 = 100; *p1 = 200; //delete p1; p1 = &a1; cout<<*p1<<endl;//100 //此时p1指向了栈上的内存,不能被delete,delete只能删除new的 //new 的不释放,则会内存泄露 //delete p1; int *p2= new int; *p2 = 200; int *p3 = p2; delete p3; //delete p2; 此时p2 == p3 ,指向同样内存的地址已经释放,不能重负 p3 = p1; cout<<*p3<<endl; delete ptemp;//释放p1一开始申请的空间,由于其被重定向到栈ai上,所以 //这个地址由ptemp暂时保存了。这里只是delete了堆上的地址,ptemp的4个字节 //还在,所以可以有如下操作。 ptemp = &a1; // *ptemp = 4; cout<<*ptemp<<endl; return 0; }