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

Ayuda con Error en C++ "Debug assertion failed File: dbgheap.c Line: ..."

Estas en el tema de Ayuda con Error en C++ "Debug assertion failed File: dbgheap.c Line: ..." en el foro de C/C++ en Foros del Web. Hola Lo que pasa es que en mi Visual C++6.0 me bota tres veces ese error con Lines diferentes "Debug assertion failed File: dbgheap.c Line: ...
  #1 (permalink)  
Antiguo 15/10/2008, 22:06
 
Fecha de Ingreso: junio-2007
Mensajes: 11
Antigüedad: 16 años, 10 meses
Puntos: 0
Ayuda con Error en C++ "Debug assertion failed File: dbgheap.c Line: ..."

Hola
Lo que pasa es que en mi Visual C++6.0 me bota tres veces ese error con Lines diferentes
"Debug assertion failed File: dbgheap.c Line: 47 ..."

cuando trato de liberar con delete() memoria a una de las variables declaradas dinamicamente.
Este es mi codigo que intenta averiguar si es palindromo o no una cadena:

Código:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <malloc.h>

bool palindromo(char*);

void main(){
	
    char C[]={"anita lava la tina"};
    bool a=palindromo(C);	
	cout<<endl<<a<<endl;
}

bool palindromo(char* Cade){
	
	int s,c=0,c_sinEsp=0;
	s=strlen(Cade);
	char* CopyCade=NULL;
	char* Cade_sinEsp=NULL;
	CopyCade=new char[s+1];	
	Cade_sinEsp=new char[s+1];		
	
	CopyCade=Cade;

	while(c<s){
		if(CopyCade[c]!=' '){			
			strcpy(&Cade_sinEsp[c_sinEsp++],&CopyCade[c]);	
			//cout<<Cade_sinEsp[c_sinEsp-1]<<endl;
		}		
		c++;
	}
	s=strlen(Cade_sinEsp);
	int m=(s+1)/2,f=s-1;
	for(int i=0;i<s;i++){
		if(Cade_sinEsp[i]!=Cade_sinEsp[f])
			return false;
		else
			f--;
	}
/********En este caso FUNCIONA
	//  delete(CopyCade);
	delete(Cade_sinEsp);

/*****En este caso NO  FUNCIONA
	delete(CopyCade);
	delete(Cade_sinEsp);

/****En este caso TAMPOCO  FUNCIONA
         delete(CopyCade);
	//  delete(Cade_sinEsp);

	return true;

/*****
}
Y por supuesto cuando comento los dos tambien Funciona pero no seria correcto dejar sin liberar la memoria...

A q se debe este error que me bota tres veces la ventana q me da las opciones de Anular Reintentar y Omitir............ esta bien q deje de liberar la memoria de CopyCade??.... como puedo resolver este problema-.
Gracias por su atencion.......
  #2 (permalink)  
Antiguo 16/10/2008, 02:40
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Ayuda con Error en C++ "Debug assertion failed File: dbgheap.c Line: ..."

CopyCade=Cade;
...
delete(CopyCade);


Esa asignacion simplemente hace que CopyCade apunte a Cade, no hace una copia de la cadena. A fin de cuentas estas liberando esto: char C[]={"anita lava la tina"};. Usa strcpy.

En el primer bucle no uses strcpy ya que copia una cadena y lo que queres es un caracter. Podes hacer esto por ejemplo: Cade_sinEsp[c_sinEsp++] = CopyCade[c];.
Tambien es recomendable que limpies Cade_sinEsp (usando memset con 0 por ejemplo) justo despues de reservar su memoria.

En el segundo bucle si usas return no liberas la memoria, usa una variable. Y revisalo mejor, puede que se me olvide algo ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 11:51.