gpt4 book ai didi

c - free(ptr) where ptr is NULL 会损坏内存吗?

转载 作者:太空狗 更新时间:2023-10-29 16:14:46 24 4
gpt4 key购买 nike

理论上我可以这么说

free(ptr);
free(ptr);

是内存损坏,因为我们正在释放已经释放的内存。

但是如果

free(ptr);
ptr=NULL;
free(ptr);

由于操作系统将以未定义的方式运行,因此我无法对正在发生的事情进行实际的理论分析。无论我在做什么,这是否是内存损坏?

释放 NULL 指针有效吗?

最佳答案

7.20.3.2 The free function

Synopsis

#include <stdlib.h> 
void free(void *ptr);

Description

The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs.

参见 ISO-IEC 9899 .

话虽这么说,当在野外查看不同的代码库时,您会发现人们有时会这样做:

if (ptr)
free(ptr);

这是因为某些 C 运行时(我肯定记得在 PalmOS 上就是这种情况)在释放 NULL 指针时会崩溃。

但如今,我相信可以安全地假设 free(NULL) 是标准指示的 nop。

关于c - free(ptr) where ptr is NULL 会损坏内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com