2016-08-22 16 views
-1

構造を使用してcに動的にリンクリストを作成して印刷しようとしています。しかし、私の下のコードは誰も私がこのエラーが表示されている理由を教えてください実行時エラーをスローしています。ここに私のコードです。あなたが書くときCで動的にリンクリストを作成

"構造体Cノード*ノード;":

#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を使う必要があります。

関連する問題