char *p=new char[5]; delete p;删除的是什么?难道真的是p本身?p不是分配在栈上的么?测试了一下:
发现,并不是如教材上面所说啊!测试代码如下:#include "conio.h"
#include <iostream.h>int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
char *p=new char[5];
for(int i=0;i<5;i++)
{
*(p+i)='a'+i;
} char *p1=p;
delete p;
p=new char[5]; //加不加这一句应该没有影响的啊?
for(i=0;i<5;i++)
{
cout<<*(p1+i);
} cout<<endl; getch();
return nRetCode;
}
发现,并不是如教材上面所说啊!测试代码如下:#include "conio.h"
#include <iostream.h>int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
char *p=new char[5];
for(int i=0;i<5;i++)
{
*(p+i)='a'+i;
} char *p1=p;
delete p;
p=new char[5]; //加不加这一句应该没有影响的啊?
for(i=0;i<5;i++)
{
cout<<*(p1+i);
} cout<<endl; getch();
return nRetCode;
}
p=new char[5]; //加不加这一句应该没有影响的啊?如果真的是只删除p本身,那么上面两句应该都没有影响到啊?但事实是:上面两句话对最终输出结果都有影响!
delete []p 和 delete p 有啥区别?