0

我在 .c 文件中定义了这个结构:

typedef struct node
{
    // the value to store in this node
    int i;

    // the link to the next node in the list
    struct node* next;
}
node;

我写了一个 prepend 函数,我可以在 main 的 for 循环中使用它来测试一些值:

void prepend(int i)
{
    node* newNode = NULL;
    if(first->next == NULL)
    {
        newNode->i = i;
        first->next = newNode;
        newNode->next = NULL;
    }
    else
    {
        newNode->next = first->next;
        newNode->i = i;
        first->next = newNode;      
    }
}

我究竟做错了什么?运行程序时出现分段错误。

编辑:当程序到达 if(first->next == NULL) 时出现错误

4

1 回答 1

4

NULL该代码newNodeif/else. 取消引用NULL指针是未定义的行为,在这种情况下是分段错误。在使用之前分配内存,使用malloc(), for :newNode

node* newNode = malloc(sizeof(*newNode));
if (newNode)
{
    newNode->i = i; /* No need to repeat this in both branches. */
    /* ... snip ... */
}

first在使用它之前还必须指向一个有效值node。当不再需要时,记住free()任何d。malloc()

于 2013-04-25T19:50:00.360 回答