【发布时间】:2015-10-17 08:02:25
【问题描述】:
在下面的代码中,我将数字作为输入,并将奇数发送到 list1,将偶数发送到 list2。最后,我在 list1 和 list2 中添加了值并将它们存储在 list3 中。但我是出现分段错误。请帮助我
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node//list creation
{
int data;
struct node *next;
};
struct node *list1;
struct node *list2;
struct node *list3;
/*creating list*/
void create(struct node *l, int x)
{
l->data = x;
l->next = NULL;
}
/* adding elements to list*/
void addlast(struct node *li, int x)
{
struct node *temp = NULL;
temp = (struct node *) malloc(sizeof(struct node));
temp->data = x;
while (li->next != NULL)
li = li->next;
li->next = temp;
temp->next = NULL;
}
/* printing values */
void print(struct node *lb)
{
if (lb == NULL)
printf("empty");
else
{
while (lb->next != NULL)
{
printf(" % d->", lb->data);
lb = lb->next;
}
printf(" % d->", lb->data);
}
}
/* performing addition */
void add(struct node *l1, struct node *l2)
{
int value, c = 0;
while (l1->next != NULL || l2->next != NULL)
{
value = l1->data+l2->data;
if (c == 0)
{
create(list3, value);
c++;
}
else
{
addlast(list3, value);
}
l1 = l1->next;
l2 = l2->next;
}
printf("list3");
print(list3);
}
int main()
{
int i, n, a[20], c1 = 0, c2 = 0;
list1 = (struct node *) malloc(sizeof(struct node));
list2 = (struct node *) malloc(sizeof(struct node));
list3 = (struct node *) malloc(sizeof(struct node));
printf("\n Enter the number of numbers");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (a[i] % 2 == 0)
{
if (c1 == 0)
{
create(list1, a[i]);
c1++;
}
else
addlast(list1, a[i]);
}
if (a[i] % 2 != 0)
{
if (c2 == 0)
{
create(list2, a[i]);
c2++;
}
else
addlast(list2, a[i]);
}
}
printf("list1");
print(list1);
printf("\n");
printf("list2");
print(list2);
add(list1, list2);
return 0;
}
【问题讨论】:
-
SEGMENTATION FAULT的第一个可能原因,你没有检查
malloc()的返回值,第二个可能的原因你没有检查scanf()的返回值。如果我是编译器,我会拒绝编译如此丑陋的格式错误的代码。
标签: c pointers data-structures linked-list