我如何知道何时应该释放库函数返回的C中的字符串?
我应该使用free()
¹自己在C中释放哪些字符串?
我的知识状态:
-
char a[256];
:不 -
char *a = "abcdefg";
:不 -
char *a = malloc(15L);
:是的 -
getenv()
返回的字符串: no - Windows函数返回的字符串²:???
¹或LocalFree()
/ GlobalFree()
/ VirtualFree()
²特别是GetCommandLineW()
对于您使用的任何返回字符串的API(或大于单个简单值的其他数据,如整数),将始终在文档中提及此内容。
是的,这意味着您必须彻底阅读所有此类API函数的文档,以便跟踪并且不会泄漏内存。
必须free
d的唯一内存块是之前已经过malloc
。
现在的问题是“这个指针是指向malloc
创建的malloc
的指针吗?” 并且,如果是这样,“我应该自己解放它还是其他function会照顾它?”
这些问题没有简单的答案,通常文档会告诉你,但经验法则是负责内存创建的模块也负责解除分配。 因此,如果您使用的库希望您提供已分配的内存,那么您也应该在需要时释放它。
在显式动态分配的情况下,即malloc/alloc/realloc
您必须明确free
它。 但是现在您已经提到了字符串,有一个特殊的函数strdup()
,当您调用它时,它会为您提供引擎盖下的malloc
。
在strdup()
情况下,你必须确保没有你分配你必须free
它。