簡體   English   中英

如何釋放字符串文字消耗的內存?

[英]How do I free up the memory consumed by a string literal?

char*不再有用后,如何釋放其使用的所有內存?

我有一些struct

struct information
{
/* code */
char * fileName;
}

我顯然要在那個char*保存一個文件名,但是在使用它一段時間后,我想釋放它曾經占用的內存,我該怎么做?

E:我不是要釋放指針,而是要釋放fileName指向的空間,它很可能是字符串文字。

有多個字符串“類型” fileName可能指向:

  1. malloccallocrealloc返回的空間。 在這種情況下,請使用free

  2. 字符串文字。 如果您分配info.fileName = "some string" ,則沒有辦法。 字符串文字寫入可執行文件本身,通常與程序代碼一起存儲。 字符串文字只能由const char*訪問是有原因的,而 C++ 只允許const char* s 指向它們。

  3. 堆棧上的字符串,如char str[] = "some string"; . 使用花括號來限制它的范圍和生命周期,如下所示:

     struct information info; { char str[] = "some string"; info.fileName = str; } printf("%s\\n", info.fileName);

    printf調用導致未定義的行為,因為str已經超出范圍,因此字符串已經被釋放。

你可以使用foo.fileName = malloc(howmanychars); free(foo.fileName); .

如果從字符串文字或其他非動態分配方式初始化fileName ,則無法釋放內存。

但是,釋放少量字節幾乎毫無意義,除非您需要大量這樣的結構/文件名。 操作系統可能不會將釋放的內存返回給其他進程; 返回的內存可能可用於您的進程的未來內存分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM