因为在第二次delete的时候,p已经被置为了NULL,对NULL指针delete是不会报错误的。至少在这个平台上是这样。Linux,unix上面我没测试。不过这并不是一种好的习惯。会影响代码的可移植性。不过delete之后进行p=NULL却是一个好习惯,因为可以避免这样的运行时错误。
因为之后你还要使用,那你没必要置空,另一派别认为这是个好习惯因为防止指针多次delete。
指针不一定是可变的,如 int* const ptr;无法把所有相等的指针都置空,如果只置空在 free/delete 时...
1、指针创建时必须被初始化 2、指针在free或delete后必须置为NULL 3、指针的长度都为4字节 4、释放内存时,如果是数组指针,必须要释放掉所有的内存,如 char *p=new char[100]; strcpy(p,”Hello World”); delete []p; //注意前面的[]号 p=NULL; 5、数组指针的内容不能超过数组指针的最大容易。 如:...
delete后把这个指针变量赋值为nullptr,因为delete再次删除的时候,delete 0,就是没问题的了,而且也能让别的地方知道这个指针是否被delete过了,也还是很安全的。 用智能指针,这个我用不惯 其它比较好的讲解(仅供参考,对不对自己测试才行) C++ 里 delete 指针两次的后果分为3种情况: ...
我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。 而为了保存一个数据在内存中的地址,我们就需要指针变量。 因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。 在我个人的理解中,可以将指针理解成int整型,只不过它存放的数...
return 0;} “野指针”与空指针不同,“野指针”有地址,或者说指向指定的内存,对野指针进行操作很容易造成内存错误,破坏程序数据等危险。“野指针”无法简单地通过if语句判断其是否为 NULL来避免,而只能通过养成良好的编程习惯来尽力减少,free函数执行后,一定要接着设置指针为NULL。
指针变量没有被初始化(如果值不定,可以初始化为NULL) 指针被free或者delete后,没有置为NULL, free和delete只是把指针所指向的内存给释放掉,并没有把指针本身干掉,此时指针指向的是“垃圾”内存。释放后的指针应该被置为NULL. 指针操作超越了变量的作用范围,比如返回指向栈内存的指针就是野指针。
1.1.2.1重载全局的new和delete操作符 可以很容易地重载new和 delete操作符,如下所示: void * operator new(size_t size) { void *p = malloc(size); return (p); } void operator delete(void *p); { free(p); } 这段代码可以代替默认的操作符来满足内存分配的请求。出于解释C++的目的,我们也可以直接...