【发布时间】:2021-02-16 03:36:19
【问题描述】:
假设我有一个这样的结构 node:
struct node {
struct other_struct value;
int some_num;
}
我看过sn-ps的代码,其中结构可以在不调用malloc的情况下进行初始化,如下所示:
struct node my_node;
my_node.value = NULL;
my_node.some_num = 2;
然后value 可以稍后被分配。但是,我如何释放my_node?
【问题讨论】:
-
您发布的代码无法编译
-
你无法释放它。而你实际上不需要。如果它是一个局部变量,编译器将负责管理该内存。如果它是静态或全局变量,那么它在整个代码执行过程中仍然有效,并且在进程运行时永远不需要回收它的内存。
-
如果 value 是您想要指向
malloc的指针(我不完全明白您的问题),即使您mallocvalue也不必释放my_node。但是,您可能需要释放value。 -
可能你的意思是
my_node.value = NULL; my_node.some_num = 2;,而不是那里使用->运算符? -
你必须知道
malloc()和朋友分配了哪些内存,才能准确释放。如果您修复代码并稍后分配一个struct other_struct以通过my_node->value使用,那么您将需要释放该指针。你不需要释放my_node;它不是由malloc()分配的,不能被释放。