Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error al llamar a constructor de clase: Volcado de PILA en tiempo de ejecucion

Estas en el tema de Error al llamar a constructor de clase: Volcado de PILA en tiempo de ejecucion en el foro de C/C++ en Foros del Web. En Xml.h tengo: #ifndef XML_HPP #define XML_HPP // El largo máximo que pueden tener las etiquetas, sin contar el '\0' final. int const ETQMAX = ...
  #1 (permalink)  
Antiguo 18/08/2008, 07:30
 
Fecha de Ingreso: julio-2008
Mensajes: 208
Antigüedad: 15 años, 10 meses
Puntos: 5
Error al llamar a constructor de clase: Volcado de PILA en tiempo de ejecucion

En Xml.h tengo:

#ifndef XML_HPP
#define XML_HPP

// El largo máximo que pueden tener las etiquetas, sin contar el '\0' final.
int const ETQMAX = 15;
// El largo máximo que pueden tener los valores, sin contar el ‘\0’ final.
int const VALMAX = 30;
// El largo máximo que pueden tener los textos, sin contar el ‘\0’ final.
int const TXTMAX = 1024;

struct Xml;

typedef struct parAtrib {

char id[ETQMAX+1];
char valor[VALMAX+1];
};

// Devuelve un nuevo xml con un elemento con una copia de la etiqueta
// Precondición: etiqueta solo contiene letras y/o numeros
// Precondición: 0 < strlen(etiqueta) <= ETQMAX
// Poscondición: !xmlEstaAnidado(xmlCrearNodoCompleto(etiqueta))
Xml* xmlCrearNodoCompleto(const char* etiqueta);

// Devuelve un nuevo xml con un elemento con una copia de texto
// Precondición: texto no contiene ocurrencias de ‘<’ y ‘>’.
// Precondición: strlen(texto) <= TXTMAX
// Poscondición: El texto se guarda comprimido
// Poscondición: !xmlEstaAnidado(xmlCrearNodoTexto(texto))
Xml* xmlCrearNodoTexto(const char* texto);

....... y mas cosas

#endif

en el Xml.cpp tengo:

#include "Xml.h"
#include <string.h>



typedef struct listaAtrib {

parAtrib * valor;
listaAtrib * siguiente;
};

typedef struct nodoCompleto {

char etiqueta[ETQMAX+1];
Xml *primerHijo;
listaAtrib * atributos;
};

typedef struct nodoTexto {

char valTxt[TXTMAX+1];
};

typedef union nodo {

nodoCompleto * nodoC;
nodoTexto * nodoT;
};

typedef struct Xml {

Xml * padre, *sigHno;
nodo * valor;
bool es_texto; //False == nodoCompleto; True == nodoTexto
};


// Devuelve un nuevo xml con un elemento con una copia de la etiqueta
// Precondición: etiqueta solo contiene letras y/o numeros
// Precondición: 0 < strlen(etiqueta) <= ETQMAX
// Poscondición: !xmlEstaAnidado(xmlCrearNodoCompleto(etiqueta))
Xml* xmlCrearNodoCompleto(const char* etiqueta){
Xml* nuevoxml = new Xml;
nuevoxml -> padre = 0;
nuevoxml -> sigHno = 0;
nuevoxml -> es_texto= 0;
strcpy(nuevoxml -> valor -> nodoC -> etiqueta, etiqueta);
nuevoxml -> valor -> nodoC -> primerHijo = 0;
nuevoxml -> valor -> nodoC -> atributos = 0;
return nuevoxml;
}

// Devuelve un nuevo xml con un elemento con una copia de texto
// Precondición: texto no contiene ocurrencias de ‘<’ y ‘>’.
// Precondición: strlen(texto) <= TXTMAX
// Poscondición: El texto se guarda comprimido
// Poscondición: !xmlEstaAnidado(xmlCrearNodoTexto(texto))
Xml* xmlCrearNodoTexto(const char* texto){
Xml* nuevoxml = new Xml;
nuevoxml -> padre = 0;
nuevoxml -> sigHno = 0;
nuevoxml -> es_texto= 1;
strcpy(nuevoxml -> valor -> nodoT -> valTxt, texto); // copio el texto como viene y lo guardo
return nuevoxml;
}



Y cuando llamo desde el principal cualquiera de estas dos constructoras me da error de volcado de pila en tiempo de ejecucion:

principal.cpp :

#include "Xml.h"
#include <iostream.h>
#include <stdio.h>

int main () {
char etiqueta[ETQMAX+1] = "etiqueta0";
Xml* hijo1 = xmlCrearNodoTexto(etiqueta);
return 0;
}


Alguien tiene idea de porque sale este error????
  #2 (permalink)  
Antiguo 18/08/2008, 14:55
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Respuesta: Error al llamar a constructor de clase: Volcado de PILA en tiempo de ejecu

Hola,

Cita:
Iniciado por sandinosaso Ver Mensaje
Código:
Xml* xmlCrearNodoTexto(const char* texto){
	Xml* nuevoxml = new Xml;
	nuevoxml -> padre = 0;
	nuevoxml -> sigHno = 0;
	nuevoxml -> es_texto= 1;
	nuevoxml->valor = new nodo;
	nuevoxml->valor->nodoT = new nodoTexto;
	strcpy(nuevoxml -> valor -> nodoT -> valTxt, texto);
	return nuevoxml;
}

int main(char * args[]) {
	char etiqueta[ETQMAX+1] = "etiqueta0";
	Xml * hijo1 = xmlCrearNodoTexto(etiqueta);
	delete hijo1->valor->nodoT;
	delete hijo1->valor;
	delete hijo1;
	return 0;
}
valor no esta inicializado, tampoco nodoT.

Saludos.
  #3 (permalink)  
Antiguo 23/09/2009, 13:22
 
Fecha de Ingreso: julio-2008
Mensajes: 208
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Error al llamar a constructor de clase: Volcado de PILA en tiempo de ejecu

excelente respuesta...gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:13.