【发布时间】:2018-11-03 14:58:40
【问题描述】:
我正在从一种伪 Pascal 语言“翻译”这个程序。最近我学习了 C 结构和指针的特性,从一开始我就注意到指针很烦人。所以这是链表算法中排序插入的递归版本,它仍然给我带来问题,比如崩溃。
typedef struct node Node;
struct node
{
int info;
struct node *link;
};
void ordered_insert_rec(Node *head, Node *new_node)
{
if(!head)
{
new_node->link = head;
head = new_node;
}
if(new_node->info < head->info)
{
new_node->link = head;
head = new_node;
}
else
{
ordered_insert_rec(head->link, new_node);
}
这是主要的:
int main()
{
Node head;
Node node;
Node node2;
Node inserting_node;
head.info = 1;
head.link = &node;
node.info = 3;
node.link = &node2;
node2.info = 7;
inserting_node.info = 5;
ordered_insert_rec(&head, &inserting_node);
Node *front = &head;
while(front)
{
printf("%d ", front->info);
front = front->link;
if(!front)
{
exit(1);
}
}
}
也许我在算法末尾打印的列表有问题,是吗?在提示中,输出为“1 3 7”,但程序在一段时间后崩溃。它必须是“1 3 5 7”,通过这种方式我注意到过程“ordered_insert_rec”不能正常工作。
感谢您的帮助。 :)
【问题讨论】:
-
一个重要的问题是您还需要将
node2.link=0;添加到您的代码中。你崩溃是因为你访问了无效的地址。 -
order_insert_rec逻辑应该是if()...else if()....else。看看现在发生了什么! -
node2.link和inserting_node.link未初始化:未定义的行为。
标签: c sorting pointers linked-list crash