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/