使用类的链表中的分段错误。我的方法正确吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用类的链表中的分段错误。我的方法正确吗?相关的知识,希望对你有一定的参考价值。

我需要使用类来创建链接列表。我正在调试,但似乎无法修复分段错误。

这与类的使用有关吗?以前,我只使用结构,但目前无法按照指令进行操作。还是我的代码中缺少某些内容?我在构造函数中缺少什么吗?

我留下了代码中出现细分错误的注释。

palabra.h文件

#include <iostream>
using namespace std;

class Palabra{
public:
    int p_id;
    string p_nombre;
    int p_valor;

    Palabra *next;
    Palabra *prev;

//Metodos
    Palabra(int id, string nombre);
    void printNombre();
    int calcularValorPalabra();

    void agregarSiguiente(Palabra *);
    void eliminar();
    void buscar();
};

extern Palabra primeraPalabra;
extern Palabra ultimaPalabra;
extern Palabra palabraTemp;

Palabra.cpp文件

Palabra primeraPalabra(0,"");
Palabra ultimaPalabra(0, "");
Palabra palabraTemp(0, "");


Palabra::Palabra(int id, string nombre)
    {
        p_id = id;
        p_nombre = nombre;
        p_valor = calcularValorPalabra();

        next = NULL;
        prev = NULL;
    }


void Palabra::agregarSiguiente(Palabra *nuevaPalabra)
{
    palabraTemp = primeraPalabra;

    if(primeraPalabra.p_nombre == "") //I assing the first node of the linked list, I check if the Name is empty
    {
        primeraPalabra = *nuevaPalabra;
        ultimaPalabra = *nuevaPalabra;
    }
    else while (&palabraTemp != NULL)
    {

        if(palabraTemp.next == NULL)
        {
            palabraTemp.next = nuevaPalabra; //Right here I get the error when debugging. 
            break;
        }
        palabraTemp = *palabraTemp.next;
    }
}

main.cpp

int main()
{

    Palabra prototypo(1,"proto");
    Palabra prototypo1(2,"proto2");

    primeraPalabra.agregarSiguiente(&prototypo);
    cout << primeraPalabra.p_nombre;
    primeraPalabra.agregarSiguiente(&prototypo1);
    cout << primeraPalabra.next->p_nombre;

    return 0;
}
答案

我注意到在此代码块中,您可能最终会取消引用空指针!

if(palabraTemp.next == NULL)
{
  palabraTemp.next = nuevaPalabra; //Right here I get the error when debugging. 
  break;
}
palabraTemp = *palabraTemp.next;

如果您的变量palabraTemp.nextNULL,则说明*palabraTemp.next为越野车

以上是关于使用类的链表中的分段错误。我的方法正确吗?的主要内容,如果未能解决你的问题,请参考以下文章

模板中的链表

使用类的链表

如何从java中的链表中删除一个对象?

链表:分段错误

链表中的分段错误

EXC_BAD_ACCESS 在用于基数排序的链表中的指针上