谎言吗? free /ptr/, 在哪里 ptr 是一个 NULL 损坏的记忆?
理论上我可以这么说
这是对内存的损坏,因为我们释放已释放的内存。
但如果是什么 ...
只要 OS 将无限期地表现,我无法为这发生这种情况进行真正的理论分析。
无论我做什么,对记忆都造成伤害吗?
允许的指针释放 NULL?
free/ptr/;
free/ptr/;
这是对内存的损坏,因为我们释放已释放的内存。
但如果是什么 ...
free/ptr/;
ptr=NULL;
free/ptr/;
只要 OS 将无限期地表现,我无法为这发生这种情况进行真正的理论分析。
无论我做什么,对记忆都造成伤害吗?
允许的指针释放 NULL?
没有找到相关结果
已邀请:
10 个回复
君笑尘
赞同来自:
概要
描述
功能
导致了表明的空间的事实
, 发布,即完成
可用于进一步分配。 如果一个
是一个指针 null, 然后没有任何动作发生。
看
http://www.open-std.org/JTC1/S ... 4.pdf
.
尽管如此,当你看看野外的各种代码基础时,你会注意到人们有时会这样做:
这是由于一些事实 C runtimes /我记得它的情况是什么 PalmOS/ 当指针发布时,紧急情况会完成
.
但现在我相信你可以自信地假设这一点
-这是 nop 按照标准的说明。
</stdlib.h>
裸奔
赞同来自:
尽管如此,在适当的时候有几个版本 free, 谁会崩溃 free /NULL/ , 因此,您可以看到一些保护性编程方法:
诸葛浮云
赞同来自:
文献说。
小姐请别说爱
赞同来自:
.
二哥
赞同来自:
您可以安全地删除指针 NULL. 在这种情况下,未执行操作。 换一种说法, free// 对指针没有任何东西 NULL.
裸奔
赞同来自:
看:
当您安装指针时
后
, 你可以再打电话
, 没有执行操作。
涵秋
赞同来自:
完全合法 C 也
和
delete[] /void */0
合法B. C++.
BTW, 内存释放两次通常会导致执行时间的一些错误,因此它不会损坏任何内容。
小明明
赞同来自:
尊敬
喜特乐
赞同来自:
根据标准,这应该是法律代码。
小姐请别说爱
赞同来自:
当你豁免时 /ptr/, 主要是你允许 0x100 用于另一个活动或过程的内存管理器,简单的单词这是资源的解放。
当你做的时候 ptr=NULL, 你在一个新的地方制作一个ptr点/让我们不要担心什么是 NULL/. 与此同时,您丢失了内存跟踪 0x100. 这就是记忆泄漏的原因。
因此,不建议使用 ptr=NULL 在有效 ptr.
相反,您可以使用一些安全检查 :
如果一个/ptr != NULL/
{free/ptr/;}
当你豁免时 /ptr/, 在哪里 ptr 已经表明了 NULL, 它没有履行 operation.So, 这是安全的。