Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Error de excepcion

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Error de excepcion Responder citando

Hola

Tengo un par de errores, me dan diferente mensaje pero viene provocados casi por lo mismo.

El primero me da un errror "de alacenamiento" y se produce cuando abro un archivo varias veces con el programa que cree. Si lo abro un par de veces (sin hacer nada mas) no pasa nada, pero si paso de las 7 o 8 veces me da este error de excepcion (o eso creo...).

El siguiente error se produce cuando aplico un algoritmo a ese archivo. Se que el algoritmo funciona bien, por que el resultado asi lo refleja, pero asi que aplico ese algoritmo varias veces (como en el caso de abrir el archivo) me da error de Invalid Pointer adition.

Puede ser que el error sea por no borrar variables creadas? como libero toda la memoria por jemplo al abrir otro archivo?

Agradezco cualquier sugerencia, por que llevo el programa bastante avanzado y me di cuenta de este error ahora, porque nunca lo habia probado de forma reitereda. No hace falta decir que soy un poco novato en esto... Very Happy

Gracias y un saludo
Volver arriba
Mensaje    Asunto: Responder citando

prueba con

Código:

Header File

stdio.h

Category

Input/output Routines

Syntax

#include <stdio.h>
int fflush(FILE *stream);

Description

Flushes a stream.

If the given stream has buffered output fflush writes the output for stream to the associated file.

The stream remains open after fflush has executed. fflush has no effect on an unbuffered stream.

Return Value

fflush returns 0 on success. It returns EOF if any errors were detected.


pero sin un codigo sobre el que trabajar, a ciegas es dificil responder
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Ahora que estoy repasando todo el programa, veo que me sale un error tipo "Invalid pointer operation", pero siempre al realizar la carga del archivo despues de varias veces. Si solo lo cargo 6,8 o 10 veces no sale ese error. Incluso a veces me da ese mismo error cuando cierro la ventana del programa.

En este caso me señala el error en la siguiente linea del archivo "Forms.hpp" y la linea que señala es:

/* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { }

La verdad es que no tengo ni idea de a que puede ser este tipo de error. Por una variable mal inicializada o formada?
Volver arriba
Mensaje    Asunto: Responder citando

El asunto de los punteros con C (y C++) siempre es un infierno, sobre todo en entornos windows. Esto se debe a que un puntero mal inicializado o liberado no tiene por qué "cascar" a la primera, sino que puedes ejecutar un código de forma "segura" 3 o 4 veces y no notar nada. En linux la cosa cambia y (normalmente) te da un "segmentation fault" a la primera porque tiene un control mucho más exhaustivo del uso que le damos a la memoria.

Sin poner código no te podemos ayudar más. Simplemente te digo como consejo general que revises bien tu código, y en especial lo siguiente:
- Todas las variables dinámicas (int *i, char *pp...) deben estar inicializadas antes de usarlas para nada con un "new".
- Todas esas variables deben estar liberadas una vez dejas de usarlas con un "delete" (recuerda que si es un array hay que usar "delete []"). Un buen lugar para poner estos "deletes" es en el destructor de la clase (precisamente el error te está dando en un destructor "~TForm(void)").
- Los ficheros debes cerrarlos antes de volver a abrirlos (la forma de abrir y cerrar depende de si estás usando "streams" o FILE)

Otra cosa que puede ayudar es una utilidad del Builder llamada "CodeGuard" que chequea la mayoría de estas cosas. No es excesivamente intuitivo pero puede ayudarte a localizar por dónde anda el fallo.

Espero que esto te sirva de ayuda.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Muchas gracias, me pondre a ello. Efectivamente tengo variables creadas dinamicamente pero sin destruirlas. La verdad es que aun soy muy novato en esto. Lo volvere a repasar con vuestros consejos.

Muchas gracias de nuevo.
Volver arriba
Mensaje    Asunto: Responder citando

Ya he conseguido solucionar casi todos los errores. No conocia el Codeguard y la verdad es que ayuda bastante. Pero tengo una duda respecto a que me marca que una variable no ha sido borrada. El problema es que me indica la direccion de memoria (bueno, me imagino que sera eso Very Happy), y no se a que variable se refiere.

Algo asi como: 0x00E62E0C. Me sale una ventana que pone CPU, pero no aparece el nombre de la variable. Hay alguna forma de saber a que variable se refiere?
Volver arriba
Mensaje    Asunto: Responder citando

Precisamente a esto último me refería cuando decía que el Codeguard no era excesivamente intuitivo.

La única forma que conozco de seguirle la pista a las variables tal como indica el codeguard es ir apuntando las direcciones de memoria de las variables que crees. Esto lo puedes hacer si no tienes demasiadas variables dinámicas haciendo un watch o un inspect de la variable, que junto al nombre te muestra su dirección.

Otra forma que se me ocurre es que imprimas a un fichero la dirección de cada variable que crees para poder identificarlas cuando te salga el error.

Si alguien del foro conoce una forma más sencilla de seguir la variable a mí también me interesa.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.