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

您的程序的第二个块中有错误。你写

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

在此之前你写过

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

只有当 malloc 无法为您分配任何内存并返回 NULL 时,marker1 才会为 NULL。当 marker1 为 NULL 时,您无法访问 marker1->next,这会导致分段错误。当您询问超出限制的内存量并且您编写的 if 语句将不正确时,Malloc 返回 NULL。但是应该避免 if 块内的语句。当指针为 NULL 时,在尝试访问数据的地方编写代码是错误的做法。

于 2013-03-27T04:11:26.787 回答