This question already has answers here:
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