我正在用C创建链接列表程序,并且我继续遇到分段错误。我已经将问题缩小到几行代码,我相信它与检查NULL有关。我怎样才能解决这个问题?这是代码:
typedef struct node
{
int contents;
struct node *nextNode;
} Node;
deleteNode(Node *currentNode)
{
while((currentNode->contents) != NULL)
{
//.....Do Stuff.....
currentNode = currentNode->nextNode;
}
}
由于
答案 0 :(得分:7)
尝试检查以确保在currentNode
开头时NULL
不是deleteNode()
。即。
deleteNode(Node *currentNode)
{
if (currentNode == NULL) return;
// ...
// ...
}
答案 1 :(得分:4)
如果问题是我怀疑的那样,currentNode
是一个空指针。在尝试访问它之前,请确保currentNode
不为空。
deleteNode(Node* currentNode)
{
while ((currentNode != NULL) && (currentNode->contents != NULL))
{
/* ... */
currentNode = currentNode->nextNode;
}
}
答案 2 :(得分:0)
好吧,我怀疑这一行:
while((currentNode->contents) != NULL)
将contents
结构的Node
字段(int
}与NULL
进行比较...我猜这应该是在检查{ {1}},而不是!
因此,可能:您的currentNode->nextNode
都不为零,因此对于列表中的每个项目,此测试均为真。然后最后一个项目有一个NULL contents
,它被分配给currentNode->nextNode
,并且它会在下一次循环时将其解除引用。
答案 3 :(得分:0)
当currentNode为NULL时会发生什么?它在while条件下取消引用NULL内存。