Delete NULL error?
int main(){
int *p=NULL;
delete p;
return 1;
}
猜猜这句会不会出错
说说理由。
今天看C++ Primer一发现 会不会导致内存有问题啊?因为这是个0地址。看delete函数怎么运行的了 delete 这个函数已近自带检测是否null
所以如果有个指针p
这样写是多余的if(!p)delete p;
阿阿,以前写了很多多余代码
以后还应该注意把p=NULL
就好像:
int *p=new int;
doSomething(p);
delete p;
//delete p;//这句不能有,不能删除两次
p=NULL;//这句保证以后不会删错
[ Last edited by adisonlee on 2005-12-1 at 21:40 ] 如果p等于NULL,则delete p不作任何事情
delete之后,立即将指针设置为NULL,防止产生“野指针”。 new/delete是C++的运算符,不是函数.
delete一个指针多少次都可以通过编译,但是正确做法是这样的
delete p;
p=NULL;
设p=NULL不是为了防止删除错,而是怕给一个指向的内存已经给delete的指针赋值. Originally posted by powerwind at 2005-12-1 10:54 PM:
new/delete是C++的运算符,不是函数.
delete一个指针多少次都可以通过编译,但是正确做法是这样的
delete p;
p=NULL;
设p=NULL不是为了防止删除错,而是怕给一个指向的内存已经给delete的指针赋值.
delete也算对于编译器来说也是个函数吧,因为在编一器眼中就好像这样调用delete(p)
只是个比较特别的函数
就好像调用\"+\"号函数,都需要自己重载
例如class a,b;
a=a+b;其中+号都需要我自己写函数。
甚至new 和delete 也可以重载(C++Primer,P632)
关于:\"设p=NULL不是为了防止删除错,而是怕给一个指向的内存已经给delete的指针赋值\"
这个不太明白你说什么哦(什么是已近给delete的指针赋值),不过具体看看C++ primer一些看法,我也只是参考他的发言,阿阿,具体不讨论太多。
关于delete的一些关于delete NULL操作页数:P340 设p=NULL不是为了防止删除错,而是怕给一个指向的内存已经给delete的指针赋值.
我是说得不清。
应该说,如果执行了delete p,然后再对P进行操作,比如再delete或赋值,那个时候它的内存已经另有分配了。可能会崩溃
页:
[1]