Error de ejecucion

Iniciado por JulioRL8, 14 Junio 2016, 17:17 PM

0 Miembros y 1 Visitante están viendo este tema.

JulioRL8

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:
Código (cpp) [Seleccionar]
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:
Código (cpp) [Seleccionar]
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...

class_OpenGL

#1
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í:

Código (cpp) [Seleccionar]
Lista::Lista() {
   cabecera = NULL;
}


Y en la función insertar, algo así:

Código (cpp) [Seleccionar]
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;
   }
}

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

JulioRL8

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í:

Código (cpp) [Seleccionar]
Lista::Lista() {
    cabecera = NULL;
}


Y en la función insertar, algo así:

Código (cpp) [Seleccionar]
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!!!