gpt4 book ai didi

c++ - 具有一个版本的等效代码的 SegFault?

转载 作者:行者123 更新时间:2023-11-30 02:58:48 26 4
gpt4 key购买 nike

我认为有两组代码是等效的,但一组会导致段错误,而另一组则不会。我真的很困惑为什么会这样......

我想创建一个查找函数

此代码确实有效:

    MyPair <Comparable, BinomialNode<Comparable>*> dummy(x, NULL);
MyPair <Comparable, BinomialNode<Comparable>*>* pair = hashTable.find(dummy);
if(pair!=NULL)
{
addDupe(x, pair);
}

void addDupe( Word & x, MyPair<Word, BinomialNode<Word>*>* pair)
{
list<int>::iterator it;
list<int> lines = x.getLineNums();
for ( it=lines.begin(); it != lines.end(); it++ )
{
pair->second->element.addLineNum(*it);
}
}

下面的代码不起作用。上面的更改是我尝试做的是尝试将查找函数移出并使其返回 BinomialNode*,这将是 MyPair 中的第二个元素。此版本中的 addDupe 处理 BinomialNode* 而不是 MyPair*。

我跟踪了段错误以返回 pair->second。
为什么这会导致段错误,但上面的 pair->second->element.addLineNum(*it) 却不会?

BinomialNode<Comparable>* node = find(x);
if(node!=NULL)
{
addDupe(x, node);
}

BinomialNode<Comparable>* find(Comparable& x)
{
MyPair <Comparable, BinomialNode<Comparable>*> dummy(x, NULL);
MyPair <Comparable, BinomialNode<Comparable>*>* pair = hashTable.find(dummy);
if(pair!=NULL)
return NULL;
return pair->second; //LINE CAUSES SEGFAULT
}

void addDupe( Word & x, BinomialNode<Word>* node)
{
list<int>::iterator it;
list<int> lines = x.getLineNums();
for ( it=lines.begin(); it != lines.end(); it++ )
{
node->element.addLineNum(*it);
}
}

最佳答案

if(pair!=NULL) //when pair is not 0
return NULL;

所以在那之后你试图访问 NULL 指针是什么导致了 SEGFAULT

您必须检查 NULL:

if(pair==NULL) //when pair is 0
return NULL;

关于c++ - 具有一个版本的等效代码的 SegFault?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13451745/

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