设置指针,保持NULL

时间:2013-11-09 00:23:18

标签: c null-pointer

我正在尝试实施一个链表,我遇到了一个非常顽固和令人沮丧的问题。这是相关的代码。

Node* current = list->head;
Node* previous = malloc(sizeof(Node*));
previous = NULL;
while(current != NULL){
    if(current == NULL){
        printf("current is null");
    }
    last = current;
    current = current->next;
    if(last == NULL){
        printf("last is null");
    }
} 

现在它的问题是打印

“last is null”

经常但不打印

“当前为空”

一次。如果current不为null并且我设置last = current那么为什么最后一次保持为null?

感谢您提供任何见解

1 个答案:

答案 0 :(得分:1)

首先,您不希望使用sizeof(Node*)来分配指针的大小(32位/ 64位/其他东西,具体取决于平台)。这是毫无意义的,因为您可以并且已经使用Node* previous定义指针。

其次,while()中的表达式检查当前是否不等于NULL。如果current等于NULL,它只会退出循环,因此if(current == NULL)比较将不会执行。

如果您将if(current == NULL)放在current = current->next;之后,则可以使该比较有效。但是,如果打印了last is null,则其他内容也会因代码完全存在缺陷,因为current必须在last之前为空。令人惊讶的是它没有给出分段错误或其他什么。