【发布时间】:2016-02-07 19:21:29
【问题描述】:
我正在尝试将一些成员添加到基本链接列表中(而且我总是添加到列表的末尾)。
列表代码:
void createList(char * name, Test * node) {
static int flag = 0;
if(flag == 0 ){
node->name = NULL;
node->next = NULL;
flag = 1;
}
Test * newNode;
newNode = malloc(sizeof(Test));
newNode->name = name;
while(node->next != NULL) {
node = node->next;
}
node->next = newNode;
free(newNode);
}
我在这里使用静态变量来跟踪它是否是第一个函数调用(即列表为空)。
该函数本身可以正常工作,但是当我调用它来测试它(向列表中添加一些值)时:
int main(void) {
Test * node;
node = malloc(sizeof(Test));
createList("TestName",node);
printf("First Node in The List is %s\n",node->name); //segfaults
return 0;
}
这似乎是段错误并给了我标题中的错误。 我的结构如下所示:
typedef struct Test Test;
typedef struct Test {
char * name;
Test * next;
} Test;
我没有标头节点(我无法更改),所以我使用的是静态变量。我认为这不是内存问题,但可能是我将下一个指针设置为新节点,但从未设置过原始的第一个节点?即它总是 NULL 导致段错误。任何帮助将不胜感激。
【问题讨论】:
-
(请不要冒犯)您的
createList功能是荒谬的。你能解释一下它的作用吗?以评论为例。 -
那么静态标志在第一次调用时将结构值设置为 NULL(将值初始化为 NULL)。然后我创建一个新节点,对其进行 malloc,并将其名称设置为调用者提供的名称。我通过列表直到 node->next 不是 NULL (即在这种情况下它立即存在)。然后我将节点的下一个指针设置为新节点。我对链表不太熟悉,所以请尽可能更正我的代码。
-
不!找一本解释链表的好书。
标签: c pointers segmentation-fault malloc