Создание связанного списка - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь представить график, используя список смежности, но у меня проблемы с указателями.

typedef struct vertex{
    int num;
    struct vertex *next;
} Vertex;

Vertex *adj[10];

void build(){
    Vertex *v=NULL;
    Vertex *t=NULL;
    v = malloc(1*sizeof(*v));

    v->num = 1;
    adj[0] = v;  //NODE with value 1
    t = v;

    v = malloc(1*sizeof(*v));
    v->num = 1;
    t->next = v; // ANOTHER NODE but it should be the SAME NODE with the above one
    t = v;

    //v = malloc(1*sizeof(*v));
    //v->num = 1;
    //t->next = adj[0]; // causes infinite loop...
    //t = v;

    v = malloc(1*sizeof(*v));
    v->num = 2;
    t->next = v;
    t = v;
}

То, что я пытаюсь построить, на самом деле просто. 1 -> 1,2. Но код, который я написал, не работал. В чем может быть проблема?

РЕДАКТИРОВАНИЕ: Хорошо, я исправил NULL. Ожидаемый результат 1 - >> 1,2. Граф, который имеет 2 узла 1, указывает на себя и на следующий узел со значением 2. Моя проблема, когда я создаю график после получения списка 1 -> 1,2; похоже, у меня есть 3 разных узла. Я имею в виду позже, когда я изменяю значение узла с 1 на 3, я получаю 3 -> 1,2, но так как у меня должно быть только 2 узла, желаемый результат должен быть 3 -> 3,2 после того, как я сделал это изменение.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011
t = NULL;       
v = malloc(1*sizeof(*v));    
v->num = 2;     
t->next = v;    //This is basically dereferencing a NULL pointer

Вы разыменовываете t после установки его на NULL, вызывая Неопределенное поведение .

Также вы должны сообщить нам:
Что ожидаетсявывод?
Какой вывод вы получаете?

Без этой информации трудно сказать, что вы делаете неправильно, кроме как указать на очевидные ошибки использования.

1 голос
/ 14 декабря 2011

Вы уничтожаете t в нескольких местах.В частности, с t = v; у вас больше нет исходного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...