如何释放字符串文字所消耗的内存?

YoT*_*LCD -3 c memory-management string-literals

如何释放a char*后使用的所有内存不再有用?

我有一些 struct

struct information
{
/* code */
char * fileName;
}
Run Code Online (Sandbox Code Playgroud)

我显然要在其中保存一个文件名char*,但在使用一段时间之后,我想释放以前的内存,我该怎么做?

E:我并不是要释放指针,而是指向的空间fileName,这很可能是一个字符串文字.

cad*_*luk 7

有多个字符串"类型" fileName可能指向:

  1. 太空返回的malloc,callocrealloc.在这种情况下,使用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);
    
    Run Code Online (Sandbox Code Playgroud)

    printf调用导致未定义的行为,因为str已经超出范围,因此该字符串已被释放.