[英]How do I free up the memory consumed by a string literal?
在char*
不再有用后,如何釋放其使用的所有內存?
我有一些struct
struct information
{
/* code */
char * fileName;
}
我顯然要在那個char*
保存一個文件名,但是在使用它一段時間后,我想釋放它曾經占用的內存,我該怎么做?
E:我不是要釋放指針,而是要釋放fileName
指向的空間,它很可能是字符串文字。
有多個字符串“類型” fileName
可能指向:
malloc
、 calloc
或realloc
返回的空間。 在這種情況下,請使用free
。
字符串文字。 如果您分配info.fileName = "some string"
,則沒有辦法。 字符串文字寫入可執行文件本身,通常與程序代碼一起存儲。 字符串文字只能由const char*
訪問是有原因的,而 C++ 只允許const char*
s 指向它們。
堆棧上的字符串,如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.