0

2つの構造体があるとしましょう。

    typedef struct name{
    char*name;
    struct test *next;
    }name_t;

    typedef struct test {
    int grade;
    int studentNumber;
    struct test *next;
    }test_t;

マーカーにはテストへのポインタがあります。リンクリストを作成するにはどうすればよいですか?

私はこれを試しました

name_t *marker1 = malloc(sizeof(name_t));
// added name from another function
test_t *temp= malloc(sizeof(test_t));
// add the grade and student number from another function
if(marker1->next==NULL)
marker1->next=temp;

しかし、それは私にエラーを与えます

これを修正するにはどうすればよいですか?リンクリストをコーディングするのはこれが初めてなので、助けていただければ幸いです。

編集:また、私は以下を関数にしました

void test(name_t* marker1,int data)
{
        test_t *temp= malloc(sizeof(test_t));
        test_t *location=NULL;
        temp->grade=data;
        temp->next=NULL;
        location=marker1->next;
        if(location==NULL)
        {
        //  printf("%i \n",temp->grade);
            marker1->next=temp;
        }
        else
        {
            while(location!=NULL)
            {
                printf("%i \n",location->grade);
                printf("%p \n",location->next);
                location=location->next;
            }
            location=temp;
        }
}

なんらかの理由でリストを通過していないようです。なんで?

4

2 に答える 2

2

struct test *next;tag名前を参照しtestます。

typedef struct THIS_IS_WHERE_TAG_NAME_SHOULD_BE {
  ...
} test;

そして、あなたはどこにもそのようなタグ名を持っていません。追加します。

于 2013-03-27T03:52:42.780 に答える
0

プログラムの2番目のブロックにエラーがあります。あなたが書いた

if(marker1==NULL)
marker1->next=temp;

これに先立ってあなたは書いた

name *marker1 = malloc(sizeof(name));

マーカー1は、mallocがメモリを割り当てることができず、NULLを返す場合にのみNULLになります。mark1がNULLの場合、marker1-> nextにアクセスできず、セグメンテーション違反が発生します。制限を超えるメモリの量を要求すると、MallocはNULLを返し、記述したifステートメントはtrueになりません。ただし、ifブロック内のステートメントは避ける必要があります。ポインタがNULLのときにデータにアクセスしようとしている場所をコーディングするのは間違った方法です。

于 2013-03-27T04:11:26.787 に答える