したがって、私のコードには 2 つの構造があります。1 つ目は、int 値と別のノードへのポインターを含むノードです。2 番目の構造体は、それぞれ別のノードを指す 10 個のポインターの配列を作成するために使用されます。また、配列とそれが指すすべてのノードをトラバースするために使用される link2 も含まれています。それぞれ値 3 を保持する 3 つのノードを配列の 3 番目のインデックスに追加しようとしています。3 番目のインデックスのポインターは最初の 3 を指し、次にそれが 2 番目の 3 を指す必要があります。add(a,3) を 3 回入力してから印刷すると、セグメンテーション違反が発生します。コードをトレースしようとしましたが、常に 3 つのノードになってしまうため、意味がわかりませんでした。誰かが私をある方向に向けることができますか? ありがとう!:)/>
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
int x;
struct node *link;
};
struct listofnodes
{
struct node *alist[10];
struct node *link2;
};
addFirst(struct listofnodes *a, int num)
{
struct node *nodeone = (struct node *)malloc(sizeof(struct node));
nodeone->x = num;
a->alist[num] = nodeone;
// printf("IT WENT THROUGH\n");
}
add(struct listofnodes *a, int num)
{
struct node *current;
current = a->alist[3];
struct node *nodeone = (struct node *)malloc(sizeof(struct node));
nodeone->x = num;
current->x = 5;
{
while (a->alist[3] != NULL)
{
if (a->alist[3]->link == NULL)
{
a->alist[3]->link = nodeone;
printf("IT WENT THROUGH\n");
break;
}
a->alist[3] = a->alist[3]->link;
}
}
}
main(void)
{
struct listofnodes *a =
(struct listofnodes *)malloc(sizeof(struct listofnodes));
// a->alist[3]=NULL;
addFirst(a, 3);
add(a, 3);
add(a, 3);
add(a, 5);
}