0

したがって、私のコードには 2 つの構造があります。1 つ目は、int 値と別のノードへのポインターを含むノードです。2 番目の構造体は、それぞれ別のノードを指す 10 個のポインターの配列を作成するために使用されます。また、配列とそれが指すすべてのノードをトラバースするために使用される link2 も含まれています。それぞれ値 3 を保持する 3 つのノードを配列の 3 番目のインデックスに追加しようとしています。3 番目のインデックスのポインターは最初の 3 を指し、次にそれが 2 番目の 3 を指す必要があります。add(a,3) を 3 回入力してから印刷すると、セグメンテーション違反が発生します。コードをトレースしようとしましたが、常に 3 つのノードになってしまうため、意味がわかりませんでした。誰かが私をある方向に向けることができますか? ありがとう!:)/>

#include <stdio.h>
#include<stdlib.h>
#include<string.h>

struct node
{
    int x;
    struct node *link;
};

struct listofnodes
{
    struct node *alist[10];
    struct node *link2;
};

addFirst(struct listofnodes *a, int num)
{
    struct node *nodeone = (struct node *)malloc(sizeof(struct node));
    nodeone->x = num;
    a->alist[num] = nodeone;
    // printf("IT WENT THROUGH\n");
}

add(struct listofnodes *a, int num)
{
    struct node *current;
    current = a->alist[3];
    struct node *nodeone = (struct node *)malloc(sizeof(struct node));
    nodeone->x = num;
    current->x = 5;
    {
        while (a->alist[3] != NULL)
        {

            if (a->alist[3]->link == NULL)
            {
                a->alist[3]->link = nodeone;
                printf("IT WENT THROUGH\n");
                break;
            }
            a->alist[3] = a->alist[3]->link;
        }
    }
}


main(void)
{
    struct listofnodes *a =
        (struct listofnodes *)malloc(sizeof(struct listofnodes));
    // a->alist[3]=NULL;
    addFirst(a, 3);
    add(a, 3);
    add(a, 3);
    add(a, 5);
}
4

1 に答える 1

0

main() 関数には次のものがあります。

struct listofnodes *a =
    (struct listofnodes *)malloc(sizeof(struct listofnodes));

"a" は、ランダムな位置を含むノード サイズのメモリ ブロックへのポインタになりました。あなたはおそらく次のようなことをしたいでしょう

a->link2 = NULL;

また、 add() 関数には...

add(struct listofnodes *a, int num)
{
    struct node *current;
    current = a->alist[3];
    struct node *nodeone = (struct node *)malloc(sizeof(struct node));
    nodeone->x = num;

ランダムなメモリを malloc() して x に "num" を入れましたが、"link" の場所に null を入れる必要があります。つまり、

    nodeone->link = NULL;

malloc() を使用してメモリ ブロックを作成するときは、'link' メンバーが NULL に設定されていることを手動で確認する必要があります。

于 2013-09-16T01:48:46.860 に答える