有必要在程序结束前做一个 free(string) 吗?
Is necessary to do a free(string) before end a program?
假设我设置一个指针是为了有一个字符串,eg:
char *string = NULL;
size_t size = 0;
getline(&string, &size, stdin);
是否有必要在程序结束前做一个free(string)
?
正如我在 man 中看到的那样,getline 调用了 malloc()
,我已经猜到了。
为确保您的软件没有任何内存泄漏,是的,您应该为动态分配的任何内存调用 free
。
内存将在进程终止时由 OS 回收,因此这无关紧要,除非您 运行 可用内存不足。但是,如果您正在编写将 运行 在后台运行的软件,例如守护进程,则使用 free
释放内存非常重要。
建议(几乎普遍)正确的方法 (tm) 是 free
你的记忆,而不是依赖 OS 来回收 space。
没有必要。
如另一个答案中所述,有一些很好的理由。但也有一些不这样做的原因:执行释放的代码需要额外的时间来编写、调试和维护,并且是额外的潜在错误来源。
不可能给出一个你应该或不应该的普遍答案:这是每个项目必须根据自己的情况做出的选择。
假设我设置一个指针是为了有一个字符串,eg:
char *string = NULL;
size_t size = 0;
getline(&string, &size, stdin);
是否有必要在程序结束前做一个free(string)
?
正如我在 man 中看到的那样,getline 调用了 malloc()
,我已经猜到了。
为确保您的软件没有任何内存泄漏,是的,您应该为动态分配的任何内存调用 free
。
内存将在进程终止时由 OS 回收,因此这无关紧要,除非您 运行 可用内存不足。但是,如果您正在编写将 运行 在后台运行的软件,例如守护进程,则使用 free
释放内存非常重要。
建议(几乎普遍)正确的方法 (tm) 是 free
你的记忆,而不是依赖 OS 来回收 space。
没有必要。
如另一个答案中所述,有一些很好的理由。但也有一些不这样做的原因:执行释放的代码需要额外的时间来编写、调试和维护,并且是额外的潜在错误来源。
不可能给出一个你应该或不应该的普遍答案:这是每个项目必须根据自己的情况做出的选择。