初心者の質問。私はこの機能を持っています。前のノードを解放した後にノードを追加するときにプログラムがクラッシュする。
void removeNodes(Node *start)
{
Node *temp;
int counter = 0;
while(start)
{
temp = start;
start = start->next;
free(temp);
counter++;
}
printf("%d node/s has been removed\n\n", counter);
}
私のmain()
では、私には選択肢があります。
- 私はオプションで、私が作成したノードを解放することを決めたまでは何の問題は、ループの最初のセットではありませんでしたすべてのノード
- 出口プログラム
を削除
main()
にリセットしてNULL
にリセットしました。しかし、それはまだプログラムを壊している。 私が読んでいる本には、なぜこれが起こっているのか説明がありません。または彼らはそれを持っているかもしれないが、彼らは最後のページにあります。私は340/632ページにいる)=。..初心者ここ。多分私は他のベテランにとってとてもシンプルなものを見逃しているだけかもしれません。 Plsは私を助ける。 tnx ..
そして、これは私のmain()
機能の単なるサンプルです。私はすべてを含んでいませんでした。
Node *start = NULL;
int choice;
int pos = 1;
int data;
int node_qty = 0;
while(1)
{
printf("1. Add node\n2. Delete all nodes\n3. Quit ");
scanf(" %d", &choice);
if(choice == 1)
{
if(!node_qty)
{
printf("Enter the value of the first node: ");
scanf(" %d", &data);
}
else
{
printf("Enter a value: ");
scanf(" %d", &data);
do
{
printf("Enter the position: ");
scanf(" %d", &pos);
if(pos > node_qty + 1)
{
printf("Invalid input. Current node quantity: %d\n", node_qty);
printf("\n\n\n\n\n\n\n\n\n");
system("PAUSE");
system("cls");
}
}while(pos < 1 || pos > node_qty + 1);
}
insertNode(&start, pos, data);
printf("\n\n\n\n\n\n\n\n\n");
system("PAUSE");
system("cls");
node_qty++;
}
else if(choice == 2)
{
removeNodes(start);
//reset
start = NULL;
node_qty = 0;
printf("\n\n\n\n\n\n\n\n\n");
system("PAUSE");
system("cls");
}
else if(choice == 3)
{
printf("Program ends");
break;
}
}
//then after all of that, I am making sure that it will free the nodes
removeNodes(start); //I don't think the problem is here.
これは、あなたが右のあなたのプログラム内のすべてのノードを削除した後に新しいノードを作成する場合、それはNULL
あるときは、start
にアクセスしている
void insertNode(Node **start, int pos, int data)
{
Node *temp1 = malloc(sizeof(Node));
temp1->data = data;
Node *temp2 = *start;
if(pos == 1)
{
temp1->next = *start;
*start = temp1;
}
else
{
for(int i = 0; i < pos - 2; i++)
{
temp2 = temp2->next;
}
temp1->next = temp2->next;
temp2->next = temp1;
}
}
//and for checking, here's my print function
void printNode(Node *start)
{
while(start)
{
printf("%d ", start->data);
start = start->next;
}
printf("\n\n");
}
残りのコードを掲載する必要があります。私はあなたがリストを入力するいくつかの問題があると思う。 –
おそらく問題は他の場所であり、適切に形成されたリンクリストではありません。それとも別のものかもしれません。おそらく、オプションを処理するコードを表示する必要がありますか? – lurker
完全な最小限の例を投稿してください。 –