2011-12-14 1 views
0

인접 목록을 사용하여 그래프를 나타내려고하지만 포인터에 문제가 있습니다.링크 된 목록 생성

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. 하지만 내가 작성한 코드는 작동하지 않았습니다. 무엇이 문제 일 수 있습니까?

EDITED : 좋아, NULL을 수정했습니다. 예상되는 출력은 1 - >> 1,2입니다. 2 개의 노드가 1을 가리키는 그래프와 다음 노드의 값이 2 인 그래프. 리스트를 얻은 후 그래프를 만들 때 문제가 발생합니다. 1 -> 1,2; 나는 3 개의 다른 노드를 가지고있는 것처럼 보인다. 나중에 노드 값을 1에서 3으로 변경하면 3 -> 1,2가되지만 노드를 2 개만 가져야하므로 변경 한 후에 원하는 출력이 3 -> 3,2가되어야합니다.

+0

t를 v로 설정하면 t가 NULL로 설정됩니다. – wildplasser

+0

질문의 기초를 완전히 변경하면 안됩니다. 대답을 수락하고 대신 다른 후속 질문을 제출하십시오. 그런 다음 완전한 (필요한 것 이상은 아니지만) 코드를 추가하십시오. – moooeeeep

+0

그렇다면 가능한 중복에 대해 불평 할 수 있습니다. ( – thetux4

답변

1

여러 위치에서 t을 (를) 폐기하고 있습니다. t = v;을 사용하면 다른 곳에서는 원래 가치가 없습니다.

2
t = NULL;  
v = malloc(1*sizeof(*v));  
v->num = 2;  
t->next = v; //This is basically dereferencing a NULL pointer 

당신은 정의되지 않은 동작의 원인 NULL로 설정 한 후 t를 역 참조한다.

또한 알려주십시오.
예상되는 출력은 무엇입니까?
출력은 무엇입니까?

이 정보가 없으면 명백한 사용 오류를 지적하는 것 외에는 잘못된 것을 알리기가 어렵습니다.

+0

"기본적으로"? 나는 그것이 매우 많은 자격을 필요로하지 않는다고 생각한다. :) –

+0

좋아, 나는 질문을 편집했다. – thetux4