[英]How do I know when I ought to free strings in C returned by library functions?
我应该使用free()
¹自己在C中释放哪些字符串?
我的知识水平:
char a[256];
:没有 char *a = "abcdefg";
:没有 char *a = malloc(15L);
:是的 getenv()
返回的字符串: 否 ¹或LocalFree()
/ GlobalFree()
/ VirtualFree()
²特别是通过GetCommandLineW()
对于您使用的任何返回字符串(或其他大于单个简单值(例如整数)的数据)的API,在文档中都会始终提及这一点。
是的,这意味着您必须彻底阅读所有此类API函数的文档,以便跟踪而不泄漏内存。
唯一必须free
的内存块是先前已malloc
那些。
现在的问题是“此指针是指向malloc
创建的malloc
的指针吗?” 如果是这样,“我应该自己释放它吗,还是其他一些功能可以解决它?”
这些问题没有简单的答案,通常文档会告诉您,但是经验法则是,负责内存创建的模块也负责释放。 因此,如果您使用的库期望您提供已经分配的内存,那么您也应该在需要时释放它。
在显式动态分配的情况下,即malloc/alloc/realloc
您必须显式free
它。 但是,既然您已经提到了字符串,那么有一个特殊的函数strdup()
可以在调用它时为您malloc
。
如果是strdup()
,则必须确保在不分配strdup()
情况下必须free
它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.