簡體   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