This question already has answers here:
What REALLY happens when you don't free after malloc?
(17个答案)
21天前关闭。
我总是被告知要释放
但是,现在我已经读完了What REALLY happens when you don't free after malloc?,因为在程序终止后,操作系统会自动释放占用的内存,所以我不必读。
但是,为什么我的老师告诉我这样做呢?这样做有什么好处吗?
(17个答案)
21天前关闭。
我总是被告知要释放
malloc()
分配的堆内存:#include <stdlib.h>
#define width 5
int main(void)
{
char* ptr = malloc(sizeof(*ptr) * width);
/* some stuff with the heap object */
free(ptr);
return 0;
}
但是,现在我已经读完了What REALLY happens when you don't free after malloc?,因为在程序终止后,操作系统会自动释放占用的内存,所以我不必读。
但是,为什么我的老师告诉我这样做呢?这样做有什么好处吗?
最佳答案
在您的示例中,这无关紧要,因为正如您所说,当程序退出时,操作系统将为您清理。
但是强烈建议您不要这样做。一旦您的程序比本示例要复杂得多,您将遇到必须释放分配的内存以避免内存leaking的情况。
当您分配了内存但不再持有任何指向它的指针,并且程序仍在运行时,就会发生内存泄漏。由于C没有垃圾回收,因此语言和OS都不会清理该内存,直到程序退出为止,因为它没有办法知道您打算清理它,因为您没有调用free()
。如果您打算编写长时间运行的程序,这将非常成问题。
关于c - 为什么我要释放()由malloc()分配的对象? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59917863/
10-16 19:32