elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error de ejecucion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error de ejecucion  (Leído 1,055 veces)
JulioRL8

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Error de ejecucion
« en: 14 Junio 2016, 17:17 pm »

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
  1. void insertar(string cadena){
  2.    Celda *puntero;
  3.    puntero = cabecera;
  4.    while(puntero->siguiente != 0){
  5.        puntero = puntero->siguiente;
  6.    }
  7.    puntero->datos=cadena;
  8.    puntero->siguiente= new Celda;
  9. }

Y esta la clase y el struct que  se utiliza:
Código
  1. struct Celda{
  2. string datos; ///valor de la celda actual
  3. Celda * siguiente;  ///puntero al siguiente elemento de la lista
  4. };
  5.  
  6. class Lista{
  7.  
  8. private:
  9.   Celda * cabecera;
  10. public:
  11. //metodos...


« Última modificación: 14 Junio 2016, 17:26 pm por JulioRL8 » En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Error de ejecucion
« Respuesta #1 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
  1. Lista::Lista() {
  2.    cabecera = NULL;
  3. }


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

Código
  1. void insertar(string cadena){
  2.    Celda *puntero;
  3.    puntero = cabecera;
  4.  
  5.    if(NULL != puntero) { // Tienes que comprobar si hay datos o no
  6.        while(NULL != puntero->siguiente)
  7.            puntero = puntero->siguiente;
  8.  
  9.        puntero->siguiente = new Celda;
  10.        puntero->siguiente->siguiente = NULL; // Tienes que inicializar
  11.        puntero->sigueinte->datos = cadena;
  12.    } else {
  13.        cabecera = new Celda;
  14.        cabecera->siguiente = NULL; // Tienes que inicializar
  15.        cabecera->datos = cadena;
  16.    }
  17. }


« Última modificación: 14 Junio 2016, 18:13 pm por class_OpenGL » En línea

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

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Error de ejecucion
« Respuesta #2 en: 14 Junio 2016, 19:47 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
  1. Lista::Lista() {
  2.    cabecera = NULL;
  3. }


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

Código
  1. void insertar(string cadena){
  2.    Celda *puntero;
  3.    puntero = cabecera;
  4.  
  5.    if(NULL != puntero) { // Tienes que comprobar si hay datos o no
  6.        while(NULL != puntero->siguiente)
  7.            puntero = puntero->siguiente;
  8.  
  9.        puntero->siguiente = new Celda;
  10.        puntero->siguiente->siguiente = NULL; // Tienes que inicializar
  11.        puntero->sigueinte->datos = cadena;
  12.    } else {
  13.        cabecera = new Celda;
  14.        cabecera->siguiente = NULL; // Tienes que inicializar
  15.        cabecera->datos = cadena;
  16.    }
  17. }

Era exactamente eso. Muchas gracias!!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error de ejecucion
Programación Visual Basic
At0XXXic0 4 939 Último mensaje 19 Marzo 2008, 19:49 pm
por At0XXXic0
Error de ejecucion
Programación C/C++
0xDani 0 733 Último mensaje 14 Junio 2012, 20:06 pm
por 0xDani
Error de ejecucion
Programación C/C++
JulioRL8 0 714 Último mensaje 16 Junio 2016, 17:10 pm
por JulioRL8
Error en medio de la ejecución
Programación C/C++
novatoc++ 1 668 Último mensaje 26 Junio 2019, 20:07 pm
por Eternal Idol
Implementacion de una COLA en C, Error de ejecucion
Programación C/C++
ianmorar03 3 780 Último mensaje 15 Abril 2020, 00:57 am
por ianmorar03
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines