如果char*
不再有用,我如何释放struct
使用的所有内存?
我有一些struct information
{
/* code */
char * fileName;
}
char*
我显然要在fileName
中保存一个文件名,但在使用一段时间之后,我想释放以前的内存,我该怎么做?
E:我不是要释放指针,而是<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
指向的空间,这很可能是一个字符串文字。
答案 0 :(得分:7)
有多个字符串“类型”fileName
可能指向:
malloc
,calloc
或realloc
返回的空格。在这种情况下,请使用free
。
字符串文字。如果您指定info.fileName = "some string"
,则无法办理。字符串文字本身写在可执行文件中,通常与程序代码一起存储。有一个原因只能由const char*
访问字符串文字,而C ++只允许const char*
指向它们。
堆栈上的字符串,如char str[] = "some string";
。使用花括号来限制其范围和生命周期:
struct information info;
{
char str[] = "some string";
info.fileName = str;
}
printf("%s\n", info.fileName);
printf
调用导致未定义的行为,因为str
已经超出范围,因此该字符串已被解除分配。
答案 1 :(得分:1)
您可以使用foo.fileName = malloc(howmanychars);
和free(foo.fileName);
。
如果从字符串文字或其他非动态分配的方式初始化fileName
,则无法释放内存。
但是,除非你需要大量的这样的结构/文件名,否则释放少量字节就是毫无意义的。操作系统可能不将释放的内存返回给其他进程;返回的内存可能可用于进程的未来内存分配。