为什么即使使用了全局双指针变量,下面的代码仍然会导致堆栈溢出错误



为什么我总是从下面的C代码中得到堆栈溢出错误?任何见解都将不胜感激。

创建此代码是为了将节点添加到链表的末尾。

有人能检查一下这个代码并告诉我插入过程中的问题吗。我是一个相当新的程序员,如果有任何见解,我将不胜感激。

struct linked_list
{
int y;
int x;
struct linked_list *next;
};
struct linked_list **node = NULL;
void list_build(int y, int x)
{
circular_node *list = (struct linked_list *)calloc(1, sizeof(struct linked_list));
list -> y = y;
list -> x = x;
list -> next = NULL;
if(*node == NULL)
{
*node = list;
}
else
{
circular_node *array = *node;
while(array->next != NULL)
{
array = array -> next;
}
array->next = list;
}
}

@someprogrammerdue已经解释了**node的问题。一个合适的修复方法是使用常规指针(而不是指针对指针(。以下是一个工作示例(也交换了xy,因为这在其他方面是不必要的混淆(:

#include <stdlib.h>
#include <stdio.h>
struct linked_list {
int x;
int y;
struct linked_list *next;
};
struct linked_list *node = NULL;
void list_build(int x, int y) {
struct linked_list *list = malloc(sizeof(struct linked_list));
if(!list) {
printf("malloc failedn");
return;
}
list->x = x;
list->y = y;
list->next = NULL;
if(!node) {
node = list;
return;
}
struct linked_list *n;
for(n = node; n->next; n = n->next);
n->next = list;
}
void list_print() {
for(struct linked_list *n = node; n; n = n->next) {
printf("x = %d, y = %dn", n->x, n->y);
}
printf("n");
}

int main() {
list_build(1, 2);
list_print();
list_build(3, 4);
list_print();
}

考虑将node设为局部变量,并将其传递给这两个函数。或者至少让它成为静态的,使它成为本地文件,这样你就不会意外地导出通用符号名称。

相关内容

  • 没有找到相关文章

最新更新