Buenas, soy estudiante de primero de ingenieria informatica y tengo el siguiente problema. En el uso del siguiente metodo me sale un error que dice segmentation fault (core dumped). Creo entender que hago un mal uso de algun puntero y por eso me sale.
Este es el metodo:
void insertar(string cadena){
Celda *puntero;
puntero = cabecera;
while(puntero->siguiente != 0){
puntero = puntero->siguiente;
}
puntero->datos=cadena;
puntero->siguiente= new Celda;
}
Y esta la clase y el struct que se utiliza:
struct Celda{
string datos; ///valor de la celda actual
Celda * siguiente; ///puntero al siguiente elemento de la lista
};
class Lista{
private:
Celda * cabecera;
public:
//metodos...
No sé muy bien cómo tenías planteado resolver el problema. Yo solo me voy a limitar a señalar el por qué te crashea el programa (segmentation fault). Este error se produce cuando intentas acceder a un área de la memoria que no está reservada para tu programa.
No sé el error exactamente pues no has puesto suficiente código, pero probablemente se esté produciendo porque no has inicializado correctamente la variable cabecera. En el constructor tendrías que haber hecho algo así:
Lista::Lista() {
cabecera = NULL;
}
Y en la función insertar, algo así:
void insertar(string cadena){
Celda *puntero;
puntero = cabecera;
if(NULL != puntero) { // Tienes que comprobar si hay datos o no
while(NULL != puntero->siguiente)
puntero = puntero->siguiente;
puntero->siguiente = new Celda;
puntero->siguiente->siguiente = NULL; // Tienes que inicializar
puntero->sigueinte->datos = cadena;
} else {
cabecera = new Celda;
cabecera->siguiente = NULL; // Tienes que inicializar
cabecera->datos = cadena;
}
}
Cita de: class_OpenGL en 14 Junio 2016, 18:10 PM
No sé muy bien cómo tenías planteado resolver el problema. Yo solo me voy a limitar a señalar el por qué te crashea el programa (segmentation fault). Este error se produce cuando intentas acceder a un área de la memoria que no está reservada para tu programa.
No sé el error exactamente pues no has puesto suficiente código, pero probablemente se esté produciendo porque no has inicializado correctamente la variable cabecera. En el constructor tendrías que haber hecho algo así:
Lista::Lista() {
cabecera = NULL;
}
Y en la función insertar, algo así:
void insertar(string cadena){
Celda *puntero;
puntero = cabecera;
if(NULL != puntero) { // Tienes que comprobar si hay datos o no
while(NULL != puntero->siguiente)
puntero = puntero->siguiente;
puntero->siguiente = new Celda;
puntero->siguiente->siguiente = NULL; // Tienes que inicializar
puntero->sigueinte->datos = cadena;
} else {
cabecera = new Celda;
cabecera->siguiente = NULL; // Tienes que inicializar
cabecera->datos = cadena;
}
}
Era exactamente eso. Muchas gracias!!!