-1
このコードで何が間違っていますか。挿入操作中に、2番目の要素を挿入するとプログラムが停止し、Windowsはプログラムの動作が停止したことを示します。ビルドログには、Process terminated with status -1073741510
と表示され、時にはProcess terminated with status 255
と表示されます。 main関数にreturn文があるにもかかわらず。リンクされたリスト - 最後にノードを挿入
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void insert(int);
void print();
struct node
{
int data;
struct node *link;
};
struct node *temp, *temp1, *temp2, *head, *end;
int main()
{
int i, ch, a;
head = NULL;
temp = (node*)malloc(sizeof(node));
printf("Enter the number of items");
scanf("%d", &ch);
for(i = 0; i < ch; i++)
{
printf("\nEnter the number");
scanf("%d", &a);
insert(a);
**call to insert**
print();
}
return 0;
}
void insert(int x)
{
temp = (node*)malloc(sizeof(struct node));
temp->data = x;
temp->link = NULL;
temp2 = head;
if(head == NULL)
{
head = temp;
}
else
{
while(temp2 != NULL)
{
temp2 = temp2->link;
}
temp2->link = temp;
}
}
void print()
{
temp1 = head;
printf("\nthe list is:");
while(temp1 != NULL)
{
printf("%d", temp1->data);
temp1 = temp1->link;
}
}
あなたのコードはバグのためにクラッシュしています。デバッガで実行すると、クラッシュした行を教えてくれるはずです。本当に明白な間違いを見ることができます。 –
'temp2-> link = temp;': 'temp2'はwhileループの後に' NULL'です。 – BLUEPIXY
グローバル変数が多すぎます! 'print()'の 'temp1'は' print() 'に対してローカルでなければなりません。関数に 'head'を渡す方が良いでしょう。 'insert()'の 'temp'と' temp2'はローカル変数でなければなりません。ここでは、 'head'を気にする必要があります。それを関数に渡して新しいヘッドを返すほうがよいでしょう(リストに最初の要素を追加するときを除いて、古いヘッドと同じです)。あなたは 'end'を定義しますが、決してそれを使用しません。それはうんざりです。 –