0

高水準言語の経験はありますが、C は初めてです。単一リンク リストの実装が与えられました。リストを繰り返し処理しようとするたびに、メモリ不足になります (少なくとも、それが起こっていると思います)。リストの実装は次のとおりです。

/*Vertex data type.*/
typedef struct vnode {
   struct vnode *NEXT;
   int DATA;
      } VertexBody;
typedef VertexBody *TypeVertex;

/*List data type (no header, just a pointer to first item).*/
typedef TypeVertex TypeList;

これが私の印刷機能です:

void print_list(TypeList *L) {
    TypeVertex v=*L;
    while(NEXT(v)!=NULL) {
        printf("%d\n", DATA(v));
        v=NEXT(v);
    }
    printf("%d\n", DATA(v));
}

print_list を実行すると、次の出力が得られます (リストに 3 つの頂点が含まれ、データがそれぞれ 1、2、3 に設定されているとします)。

1
2
3
-94064

その後、プログラムがクラッシュします。どうしたの?

編集: 最初の段落で「トラバース」を「反復処理」に変更しました。

4

2 に答える 2

2

リンクされたリストを繰り返し処理しているときに、現在のアイテムが でないことを確認したいとしますNULL。それを確認したら、それを印刷して、次のものを取得します。

したがって、このコード:

void print_list(TypeList *L) {
    TypeVertex v=*L;
    while(NEXT(v)!=NULL) {
        printf("%d\n", DATA(v));
        v=NEXT(v);
    }
    printf("%d\n", DATA(v));
}

次のようにする必要があります。

void print_list(TypeList *L) {
    TypeVertex v=*L;
    while(v!=NULL) {
        printf("%d\n", DATA(v));
        v=NEXT(v);
    }
    printf("%d\n", DATA(v));
}
于 2012-10-19T15:55:17.447 に答える