【问题标题】:Segmentation error in linked list on getting node info获取节点信息时链表中的分段错误
【发布时间】:2023-04-04 11:37:01
【问题描述】:

我使用的是链表(不是内置的),这里我正在实现一个逻辑来比较节点(信息)的第一个字符,然后返回单词..

通过这个,我在 currN = currNode->getInfo();

行遇到了分段错误

这是我的程序:

template<class T>
string LinkedList<T>::searching(T word) {
Node<T> *currNode = head;
string currN = currNode->getInfo();
while (currNode != NULL && currN[0] != word[0]){
currNode = currNode->getNext();
    currN = currNode->getInfo();//error in this line
}
if(currNode) {
    val=currNode;//storing the address in a private pointer
    string cur = currNode->getInfo();
    return cur;
}
else{
    return "";
}}

获取信息:

// in Node class 
 private:
  T info;
 template<class T>
 T Node<T>::getInfo()   //getter for info 
 {
return info;
 }

这里我在变量T 字 中传递字符串。一点帮助表示赞赏

【问题讨论】:

  • 看起来你没有检查 currNode / head 是否为nullptr。此外,您没有显示 getInfo() 函数,因此我们无法说出其中可能隐藏的任何问题
  • minimal reproducible example,如果您希望人们(包括您自己!)阅读和理解它,请保持一致的格式!另外,完整的回溯!
  • getInfo() 只是获取存储在 info 中的字符串形式的数据
  • 那么你的脑袋可能是 nullptr,我也建议学习如何使用调试器来获取有关在这种情况下发生的更多信息!
  • 在此行之后currNode = currNode-&gt;getNext(); 你的currNode 将在列表末尾为空,但你这样做currN = currNode-&gt;getInfo();

标签: c++ linked-list


【解决方案1】:

替换:

string currN = currNode->getInfo();
while (currNode != NULL && currN[0] != word[0]){
currNode = currNode->getNext();
    currN = currNode->getInfo();//error in this line
}

用这个:

while (currNode != NULL && currNode->getInfo()[0] != word[0]){
    currNode = currNode->getNext();
}

【讨论】:

    【解决方案2】:

    当您的代码逐个节点遍历时,当它到达列表末尾时,下一行您仍在尝试调用 getInfo(),因此它崩溃了。

    currNode = currNode-&gt;getNext(); currN = currNode-&gt;getInfo();

    把这个改成,

    currNode = currNode-&gt;getNext(); if(NULL != currNode) currN = currNode-&gt;getInfo();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多