2016-08-22 4 views
-1

구조를 사용하여 c에 동적으로 링크 된 목록을 작성하고 인쇄하려고합니다. 하지만 내 아래의 코드는 런타임 오류를 던지고있다 아무도 내가 왜이 오류가 발생하는지 말해 줄 수 있습니다. 여기 내 코드가있다. 당신이 쓸 때C에서 동적으로 연결된 목록 작성

"구조체 cnode * 노드를,"

#include <stdio.h> 
struct cnode 
{ 
    int value; 
    struct cnode *next; 
}; 

void print_list(struct cnode* start) 
{ 
    while(start->next != NULL) 
    { 
     printf("%d->", start->value); 
     start = start->next; 
    } 
} 

int main(void) 
{ 
    int i,n,val; 
    //List length 
    scanf("%d", &n); 

    //Head 
    struct cnode* start; 
    scanf("%d", &val); 
    start->value = val; 

    struct cnode* temp = start; 

    for (i=1; i<=n-1; i++) 
    { 
     struct cnode* node; 
     scanf("%d", &val); 
     node->value = val; 

     temp->next = node; 
     temp = node; 
    } 
    temp->next = NULL; 

    print_list(start); 

    return 0; 
} 
+1

자동 저장 기간이 불확실한 동안 객체의 값을 사용하는 경우 정의되지 않은 동작입니다. – EOF

+0

링크 된 목록을 동적으로 만들고 싶지만 아무 것도 할당하지 않습니까? 거기에 뭔가가 당신을 위해 벨을 울립니까? – iRove

+0

몇 가지 유용한 답변을 제공 할만 큼 충분한 정보를 제공 했더라도 _what_ 런타임 오류에 대해보다 구체적으로 설명하면 _ [질문 개선] (http://sscce.org/) _ 할 수 있습니다. 그 이외에, 나는 왜 아래 표결을하는지 잘 모르겠다. – ryyker

답변

6

포인터가 가리키는 메모리를 할당하지 못했습니다. 그러려면 malloc으로 전화해야합니다.

struct cnode *start = malloc(sizeof(struct cnode)); 
if (start == NULL) { 
    perror("malloc failed"); 
    exit(1); 
} 

... 

struct cnode *node= malloc(sizeof(struct cnode)); 
if (node == NULL) { 
    perror("malloc failed"); 
    exit(1); 
} 

또한 목록을 인쇄 할 때 마지막 값을 인쇄하지 않습니다.

while(start != NULL) 
{ 
    printf("%d->", start->value); 
    start = start->next; 
} 

완료되면 메모리를 확보해야합니다.

print_list(start); 

while (start != NULL) { 
    temp = start; 
    start = start->next; 
    free(temp); 
} 

return 0; 
4

여기에 하나의 문제입니다 구조체에 대한 포인터를 생성하도록 컴파일러에 요청하고 있습니다. 그러나 해당 구조에 할당 된 메모리가 없습니다. "node-> value = val"이라고 쓰면 val의 값을 할당되지 않은 메모리에 저장하도록 요청합니다. "node"에 어떤 쓰레기가 있는지. malloc을 사용하여 실제로 메모리를 할당 한 다음 해당 메모리에 대한 포인터를 "node"변수에 저장해야합니다.

관련 문제