繁体   English   中英

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

[英]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()返回的字符串:
  • Windows函数返回的字符串²:???

¹或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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM