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

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

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

我有一些struct

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

我显然要在那个 char* 中保存一个文件名,但是在使用它一段时间后,我想释放它过去占用的内存,我该怎么做?

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

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

  1. Space 由 malloccallocrealloc 返回。在这种情况下,使用 free.

  2. 字符串文字。如果赋值info.fileName = "some string",就没办法了。字符串文字写在可执行文件本身中,通常与程序代码一起存储。字符串字面值只能由 const char* 访问,而 C++ 只允许 const char* 指向它们是有原因的。

  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,则无法释放内存。

但是,释放少量字节几乎毫无意义,除非您需要大量这样的 structs/fileNames。 OS 很可能 而不是 return 释放的内存给其他进程; returned 内存 可能 可用于您进程的未来内存分配。