将segfault转换为空指针

segfault to a null pointer C++

本文关键字:空指针 转换 segfault      更新时间:2023-10-16
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设置new,所以第一次运行时它只是一个空指针。然而,当我试图检查它是否为null(通过currNode)时,它一直出现false并说它不是null。因此,第一个if语句永远不会执行。当while循环中的if语句发生时,这会导致段错误,因为它试图从空指针中获取值。

为什么会发生这种情况?我试过valgrind,但它只是告诉我没有malloc/free/等。通过RootNode所在的地址。我知道!我试图使一个新的,如果它是空的(通过该if语句),但它只是不断出现为假,好像RootNode不是真的空。我该怎么做?

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

WordNode* RootNode=NULL;

如果这样做,请确保此构造函数之前被调用过,并且您操作的是初始化实例