【发布时间】:2014-09-23 18:14:46
【问题描述】:
下面是一个简单的 C 代码段,用于创建链表并打印链表中包含的所有元素。
要求用户输入整数数据,直到输入一个零,这标志着用户输入的终止;一旦数据保存在链表中,程序就会打印存储在链表中的所有元素,然后完成其执行。
我无法让它运行,每次出现“分段错误”错误时,请检查并告诉我哪里错了(使用 gcc 4.8.2)
代码:
struct node
{
int data;
struct node * next;
};
struct node * createLinkedList()
{
int x;
struct node * start;
start = NULL;
printf("Input 0 to end, Insert elements :\n");
for(scanf("%d", &x); x ;scanf("%d", &x))
{
struct node * temp = (struct node *) malloc(sizeof(struct node));
if (temp)
{
temp->data = x;
temp->next = NULL;
if(start == NULL) {
start = temp;
} else {
start->next = temp;
start = temp;
}
}
}
return start;
}
void printLinkedList(struct node * start)
{
if (start == NULL) {
printf("Linked List is empty!\n");
} else {
printf("\nPrinting Linked List : \n");
struct node * s;
s = start;
while(s != NULL)
{
printf("%d\n", s->data);
s = s->next;
}
}
}
int main(int argc, char const *argv[])
{
struct node * start;
start = NULL;
start = createLinkedList();
printLinkedList(start);
return 0;
}
【问题讨论】:
-
只看for循环... omg
-
将其更改为 while(x != 0) + 在适当的位置添加了 scanf("%d", &x); O/p 没有变化
-
使用您友好的邻域调试器(或 gdb),并告诉我们(和您自己)哪一行会产生异常。您比我们更容易做到,因为您已经拥有代码、环境等。
标签: c pointers memory-management data-structures linked-list