因为在第二次delete的时候,p已经被置为了NULL,对NULL指针delete是不会报错误的。至少在这个平台上是这样。Linux,unix上面我没测试。不过这并不是一种好的习惯。会影响代码的可移植性。不过delete之后进行p=NULL却是一个好习惯,因为可以避免这样的运行时错误。
因为之后你还要使用,那你没必要置空,另一派别认为这是个好习惯因为防止指针多次delete。
指针free之后,free函数只是把指针指向的内存空间释放了,即内存中存储的值,但是并没有将指针的值赋为NULL,指针仍然指向这块内存。而程序判断一个指针是否合法,通常都是使用if语句测试该指针是否为NULL来判断,导致指针成为所谓的“野指针”,诱导误操作,示例代码如下,include <stdio.h> include <mallo...
delete后把这个指针变量赋值为nullptr,因为delete再次删除的时候,delete 0,就是没问题的了,而且也能让别的地方知道这个指针是否被delete过了,也还是很安全的。 用智能指针,这个我用不惯 其它比较好的讲解(仅供参考,对不对自己测试才行) C++ 里 delete 指针两次的后果分为3种情况: 1)如果释放的这部分内存没有被...
我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。 而为了保存一个数据在内存中的地址,我们就需要指针变量。 因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。 在我个人的理解中,可以将指针理解成int整型,只不过它存放的数...
为什么指针使用了还得释放呢?支持一下自动回收岂不更好?嗯嗯,C和C++都太古老了,以前技术不行(主要...
(b)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针. (c)指针操作超越了变量的作用范围。这种情况让人防不胜防, 11、内存分配方式 内存分配方式有三种: (a)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
所以用delete释放掉一块堆内存时,应该自己手动将指针设置为NULL。 3.把指针设置为NULL或者0这样做一般只是为了没有具体初始化的时候做的,这样避免了野指针,后面可以使用if(指针==NULL)来判断,然后再进行操作。 错题解析:首先明确一个概念,就是指向数组的指针,和存放指针的数组。 指向数组的指针:char (*array)[...
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++的目的,我们也可以直接...
指针被free或者delete后,没有置为NULL, free和delete只是把指针所指向的内存给释放掉,并没有把指针本身干掉,此时指针指向的是“垃圾”内存。释放后的指针应该被置为NULL. 指针操作超越了变量的作用范围,比如返回指向栈内存的指针就是野指针。 解决办法: