分割故障,你能帮我一下吗?
Segmentation fault, can you help me?
当试图显示类型为(int)的元素时,我得到一个分段错误
template <class T>
void Lista<T>::imprimir()
{
NodoL *ptr = new NodoL;
ptr->sig = pri->sig;
cout << *ptr->sig->elem; //THIS DISPLAYS CORRECTLY
cout << *ptr->sig->sig->elem; //SEGMENTATION FAULT
}
您确定sig不是NULL吗?
template <class T>
void Lista<T>::imprimir()
{
NodoL *ptr = new NodoL;
ptr->sig = pri->sig;
cout << *ptr->sig->elem; //THIS DISPLAYS CORRECTLY
if(ptr->sig == NULL || ptr->sig->sig == NULL)
return;
cout << *ptr->sig->sig->elem; //SEGMENTATION FAULT
}
看起来您有一个链表,其中sig
指向列表的下一个元素。您的代码分配了一个新节点,并使其指向pri
中现有节点的尾部。如果列表开始时只有两个元素长,那么当您试图打印第三个元素时,这段代码自然会崩溃,因为没有这样的东西。第一个元素是*ptr->elem
,第二个元素是*pri->sig->elem
确保elem
是一个可以解引用的指针,并且它不是指向内存中的一些无效位置,或者它不是NULL。似乎您有某种类型的链表,并且您正在尝试访问一个列表节点,该节点距离ptr
指向的当前节点有两个节点。该节点可能不存在,因此sig
是一个无效指针,或者节点成员elem
是一个无效指针。无论哪种方式,在尝试解引用这么多步骤之前,都应该检查指针。实际上,这最好是通过像for循环这样的东西来完成,例如:
NodoL* temp = ptr;
for (int i=0; i < NUMBER; i++)
{
if (temp->sig == NULL)
break;
temp = temp->sig;
}
cout << *temp->elem << endl;
这样,您将从当前位置通过列表中预先指定的节点的特定NUMBER
,或者您将提前终止for循环,因为您已经到达列表的末尾。
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 有人能分解一下这个c++模板的语法吗
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 有人能解释一下为什么下界是这样工作的吗C++的
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 调试 CUDA MMU 故障
- 你能解释一下什么运行时错误是如何解决它的吗?
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- 有人可以解释一下这段代码如何能够反转字符串
- 解释一下 for (char c : str) 的作用?
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 分割故障,你能帮我一下吗?