0

我需要用 C 编写一个 LinkedList,我在文件中定义了结构,因为struct element { int value; struct element * next; }; 我还定义了一个 head 元素。这两个都不是本地的,它们是在整个运行时持续存在的变量。当我尝试使用来自外部的 -values 将元素插入到 LinkedList 中int时,我需要element在 this 周围加上一个int. 我通过创建一个局部变量来做到这一点struct element e = { value; 0 };。如果 head 为空,我将其设为 head,否则我使用 for 循环附加它。

e我想的问题是,类型的局部变量struct element在终止该函数时被删除。因此,如果我将头指向e,它将继续指向未分配的内存点,因为局部变量e不会在函数调用之后持续存在。

提前致谢!

4

2 回答 2

4

那是因为struct element e = { value; 0 };在堆栈上分配元素。当函数范围终止时,堆栈会自动释放(删除)。寻址活动范围的堆栈内存是完全有效的,但已终止的范围是未定义的行为。

您需要通过在堆上分配它malloc(sizeof(struct element));以使其在函数范围内持续存在。

struct element *e = calloc(1, sizeof(struct element));
e->value = value;

return e;

注意:calloc分配归零内存,malloc分配未定义内容的内存。

于 2012-10-27T12:49:19.513 回答
0

您必须使用struct element类型列表的动态分配项。

p_element = (struct element*)malloc(sizeof(struct element));
// check if successfully allocated
// initialize element fields: p_element->value = ...
p_element->next = NULL; // always terminator
if (!gp_head_element)
    // initialize head
    gp_head_element = p_element;
else {
    //  search for the end of list and append
}  
于 2012-10-27T12:53:50.793 回答