objective-c - 自由函数在 c/objective-c 中不起作用

标签 objective-c c memory malloc free

Possible Duplicate:
How do malloc() and free() work?

我遇到了一个奇怪的问题,我真的不知道为什么它不起作用。

我在 Xcode 中有以下代码:

void *ptr = malloc(1024 * 1024 * 100);
memset(ptr, 0, 1024 * 1024 * 100);
free (ptr); //trace this line
ptr = malloc (1024 * 1024 * 100);
memset(ptr, 0, 1024 * 1024 * 100);
free (ptr); //trace this line

我在每个 free() 行上放置了一个断点,当我跟踪程序时,free 并没有真正释放 100mb。但是,如果我将数字从 100 更改为 500(分配 500mb 两次),memset 500mb, free() 工作正常。为什么?

最佳答案

free 永远不会失败(它没有返回值),除非您使用不正确的地址调用它,这会给您带来未定义的行为。

您不必担心 free 是否实际上释放了内存,您只需确保在使用完动态内存后在正确的地址上调用 free用法,剩下的编译器应该会照顾你。
这是您应该相信编译器能够正确处理的事情之一。

此外,free 只是将正在释放的内存标记为空闲(如名称所示)以供重用。它不会清零或初始化正在释放的内存。

关于objective-c - 自由函数在 c/objective-c 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14462276/

相关文章:

Char 数组到 Int 转换

linux - mlock() 如何与休眠一起工作?

iOS @IBOutlet views all be nil only in iOS 8

ios - 半透明的 UINavigationBar

java - 数据报总是被完整接收吗?

c - fprintf() 问题 utf-8 linux

ios - NSString 文字放在内存中的什么位置?

objective-c - 为 10.5+ 编写时我应该使用 Objective-C 垃圾收集吗?

objective-c - 当返回值是不可变对象(immutable对象)时返回可变对象是不好的做法吗?

c - 嵌套结构在接收输入时崩溃