因为在第二次delete的时候,p已经被置为了NULL,对NULL指针delete是不会报错误的。至少在这个平台上是这样。Linux,unix上面我没测试。不过这并不是一种好的习惯。会影响代码的可移植性。不过delete之后进行p=NULL却是一个好习惯,因为可以避免这样的运行时错误。
指针在free或delete后未置 NULL,free和delete只是把指针所指的内存释放,并未把指针本身free掉,所以此时指针指向的就是“垃圾”内存。因此,强烈建议把释放后的指针置为NULL,避免“野指针”。 野指针指针操作超越变量作用域 不要使用指向栈内存的指针或引用,因为栈内存在函数结束时会被释放,如问题二。 五、总结 指针...
指针不一定是可变的,如 int* const ptr;无法把所有相等的指针都置空,如果只置空在 free/delete 时...
(3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。 【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存 【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。 【规则3】避免数组或指针的下标越界,特别要当心发生...
因为之后你还要使用,那你没必要置空,另一派别认为这是个好习惯因为防止指针多次delete。
这当然是个好事情,但是这种使用的简单性使得程序员们过度使用new和 delete,而不注意在嵌入式C++环境中的因果关系。并且,在嵌入式系统中,由于内存的限制,频繁的动态分配不定大小的内存会引起很大的问题以及堆破碎的风险。 作为忠告,保守的使用内存分配是嵌入式环境中的第一原则。
C++ 里 delete 指针两次的后果分为3种情况: 1)如果释放的这部分内存没有被复用,设计时cookie中有标记这部分内存已经释放,会检测到重复释放,在debug版本中显示告警信息,在正式版中什么都不会发生。 2)如果释放的这部分内存被复用了,new的新指针不是与旧指针相同的地址, 那么,就取决于内存库的设计了。我们的设计...
在debug版本下指针默认初始值为0xCCCCCCCC,在Release版本下初始值为0x0000000A,(在我电脑上VC6.0)。对于指针如果暂时没有合适的初始化值,就应该把它置为NULL(0)。 对于好的编程习惯来说,declare一个指针,则初始化为NULL,如果是类成员 则在构造函数中initialize,当对指针使用delete时候,则置它为NULL. ...
关于delete运算符的下列描述中,( )是错误的。 A. 它必须用于new返回的指针; B. 它也试用于空指针; C. 对一个指针可以使用多次该运算符; D. 指针名前只用一对方括号符,不管所删除数组的维数。 相关知识点: 试题来源: 解析 B .它也试用于空指针; ...