Так что в моем коде у меня две структуры. Первый - это узел, который содержит значение int и указатель на другой узел. Вторая структура используется для создания массива из 10 указателей каждой точки на другой узел. И он также содержит link2, который будет использоваться для перемещения массива и всех узлов, на которые он указывает. Я пытаюсь добавить 3 узла, каждый из которых содержит значение 3 в третьем индексе массива. Указатель в третьем индексе должен указывать на первые 3, а затем указывать на второй и т. Д. Когда я добавляю add (a, 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);
}
WTB тип возврата. – WhozCraig
Я не понимаю ... зачем мне что-то возвращать? – user68212
Каждый раз, когда вы создаете «узел», вы не инициализируете значение «link» в созданной вами структуре. Так что это скорее всего случайный, а не «NULL». – lurker