我怎么知道什么时候应该释放库函数返回的 C 中的字符串?

How do I know when I ought to free strings in C returned by library functions?

我应该使用 free()¹ 在 C 中自行释放哪些字符串?

我的知识状态:

¹ 或 LocalFree()/GlobalFree()/VirtualFree()
² 特别是 GetCommandLineW()

对于任何 API 您使用该 returns 字符串(或其他大于单个简单值的数据,例如整数),文档中总是会提到这一点。

是的,这意味着您必须通读所有此类 API 函数的文档,以便跟踪而不是泄漏内存。

唯一必须 freed 的内存块是之前 malloced 的内存块。

现在的问题是"is this pointer a pointer to memory that was created by malloc ?",如果是,"am I supposed to free it myself or will some other function take care of it ?"

这些问题没有简单的答案,通常文档会告诉您,但经验法则是负责内存创建的模块也负责释放内存。因此,如果您使用的库希望您提供已经分配的内存,您也应该在需要时释放它。

在显式动态分配的情况下,即 malloc/alloc/realloc 你必须显式 free 它。但是既然您已经提到了字符串,那么有一个特殊的函数 strdup(),当您调用它时,它会在后台 malloc 为您服务。

strdup() 的情况下,您必须确保在不分配的情况下必须 free 它。