segfault到空指针C ++

时间:2013-04-25 19:40:50

标签: c++ pointers null segmentation-fault nodes

WordBinaryTree::WordBinaryTree()
{
   //RootNode is a private WordNode* of WordBinaryTree()
   RootNode = 0; //just to set it to null...
}

void WordBinaryTree::AddNode(WordNode node)
{
  //RootNode is WordNode*, should be null the first time through
  WordNode* currNode = RootNode;

  if (!currNode)
  {
     currNode = new WordNode();
     currNode->Value = node.Value;
     currNode->Word = node.Word;
     RootNode = currNode;
     return;
  }

  while (1)
  {
     if (currNode->Value > node.Value) 
     //other code here......

我不太确定我的代码在世界上是什么问题。我在网上搜索过,没有任何解决方案。 WordNode是一个类型结构,RootNode只是指向它的指针。我从来没有设置新的RootNode,所以它只是第一次运行时的空指针。但是,当我尝试检查它是否为null(通过currNode)时,它会一直出现错误并说它不为空。因此,第一个if语句永远不会通过。当while循环中的if语句发生时,这会导致段错误,因为它试图从空指针获取值。

为什么会这样?我试过valgrind,但它告诉我没有malloc / free / etc。通过RootNode所在的地址。我知道!我正在尝试创建一个新的,如果它是null(通过if语句)但它只是保持为假,就好像RootNode不是真的为空。那我该怎么办?

1 个答案:

答案 0 :(得分:0)

请确保您之前已将RootNode初始化为null:

WordNode* RootNode=NULL;

如果这样做,请确保之前正在调用此构造函数并且您对初始化实例进行操作