gpt4 book ai didi

c++ - 空指针 C++ 的段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:30 24 4
gpt4 key购买 nike

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 只是指向它的指针。我从未将 new 设置为 RootNode,因此它在第一次运行时只是一个空指针。但是,当我尝试检查它是否为空(通过 currNode)时,它总是出现错误并说它不为空。因此,第一个 if 语句永远不会通过。当 while 循环中的 if 语句发生时,这会导致段错误,因为它试图从空指针获取值。

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

最佳答案

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

WordNode* RootNode=NULL;

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

关于c++ - 空指针 C++ 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com