【发布时间】:2015-05-06 04:18:54
【问题描述】:
在我正在处理的程序中,我有一个类似的结构
typedef struct _mystruct{
char* my_string;
} mystruct;
大部分时间my_string是使用malloc分配的,所以有一个函数调用
free(mystructa->my_string);
通常这是可行的,但在某些时候,my_string 被设置为文字
my_string = "This is a literal";
在我调用 free() 之前,有没有办法区分这两者?
【问题讨论】:
-
据我所知没有可靠/便携的方式。
-
查看第二个答案...stackoverflow.com/questions/9504588/… - “理想情况下,malloc() 调用和 free() 调用应该出现在同一个“设计级别”(在同一个实现文件中)模块),它们应该完美匹配:每个 malloc() 一个 free()"
-
你不应该从那个角度解决你的问题。更好地使用所有权模式:存储在内存中(通过指针)的每个对象都应该由程序的某些部分拥有。结构字段内的缓冲区通常由该结构拥有,因此 1)您应该始终将动态分配的缓冲区分配给结构字段(绝不是静态字符串)和 2)您应该始终在释放 struct 时释放内存。
-
这个问题详细解答了对象如何存储在内存中以及为什么这个任务无法解决:stackoverflow.com/questions/16360620/…
-
我将始终对字符串进行 strdup,以便我拥有要封装的字符串。那么如果调用者传递了一个本地的、常量的、静态的所有工作,即使他们传递了堆字符串然后释放它
标签: c arrays string pointers free