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,这很可能是一个字符串文字.
有多个字符串"类型" 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);
Run Code Online (Sandbox Code Playgroud)
该printf调用导致未定义的行为,因为str已经超出范围,因此该字符串已被释放.