FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error Abstract Error y Access violation
Hola!
Yo ya les habia escrito antes para platicarles sobre estos dos errores que me ocurrian, y estuvieron revisando parte de mi codigo, hice todos los movimientos que me indicaron y no los he podido resolver. Yo he continuado programando el resto del sistema, ignorando esos errores, pero de todas formas, lo reviso y no se como quitarselos, no veo el problema en mi codigo. Y lo que pasa es que realiza absolutamente todas las lineas de codigo de manera correcta, y antes del end; manda el error. Y es variable, algunas veces manda el error Abstract y otras el Access violation, por eso no puedo ubicar en donde pasa, porque lo manda una linea antes de que termine la ejecucion. Como me urge entregar el sistema la proxima semana, quiero ver la forma de ocultar esos errores, para poderlo entregar y con mas calma despues revisar el codigo, aunque nose como porque ya lo he revisado. Pero lo he puesto con excepciones y no cacha esos errores. ¿Saben como puedo hacerle? Si saben como ocultarlos me ayudaria mucho, porque en verdad el programa funciona muy bien, no se interrumpe con esos errores ni causa problemas. MUCHAS GRACIAS!! Última edición por zvf fecha: 06-04-2006 a las 21:36:59. |
#2
|
|||
|
|||
A mi me ocurria cuando estaba usando un metodo virtual en una clase heredada y aun no lo habia definido. Espero y te ayude.
Saludos |
#3
|
|||
|
|||
Gracias. Pero yo no uso metodos virtuales, ni clases heredadas, todo esta en una misma unit.
|
#4
|
|||
|
|||
Holaaa mira no vi tu hilo donde comentas tus errores, pero lo que si te puedo ecir es que tu programa bien no debe funcionar ya que un acces violation es un acceso invalido a memoria..
Te escribo una lista de excepciones a ver si te sirven, estas las podrias cachar ahi! : Exception Base class EAbort Abort without dialog EAbstractError Abstract method error AssertionFailed Assert call failed EBitsError Boolean array error ECommonCalendarError Calendar calc error EDateTimeError DateTime calc error EMonthCalError Month calc error EConversionError Raised by Convert EConvertError Object convert error EDatabaseError Database error EExternal Hardware/Windows error EAccessViolation Access violation EControlC User abort occured EExternalException Other Internal error EIntError Integer calc error EDivByZero Integer Divide by zero EIntOverflow Integer overflow ERangeError Out of value range EMathError Floating point error EInvalidArgument Bad argument value EInvalidOp Inappropriate operation EOverflow Value too large EUnderflow Value too small EZeroDivide Floating Divide by zero EStackOverflow Severe Delphi problem EHeapException Dynamic memory problem EInvalidPointer Bad memory pointer EOutOfMemory Cannot allocate memory EInOutError IO error EInvalidCast Object casting error EInvalidOperation Bad component op EMenuError Menu item error EOSError Operating system error EParserError Parsing error EPrinter Printer error EPropertyError Class property error# EPropReadOnly Invalid property access EPropWriteOnly Invalid property access EThread Thread error EVariantError Variant problem Esto lo podes encontrar en la ayuda de delphi, si veo tu codigo tal veZ te pueda ayudar..espero lo soluciones. exitos LA PATRIA SERA LIBRE! |
#5
|
|||
|
|||
Si estos errores te ocurren al terminar la aplicacion, prueba a finalizarla de la siguiente manera (es como lo hago yo por un problema similar):
__________________
noticiasfrikis, mi web de chorradas |
#6
|
||||
|
||||
NO, NO Y NO.
El problema es grave, como indica un abstract error y un access violation, y el problema no es de código sino de concepto, para eso tendrás que estudiarlo. Las clases bases de un form usan abstract; virtual etc en sus métodos, por tanto si te dan esos errores es que estas lanzando las ventanas mal. Normalmente es porque no identificas el Parent/Owner de una ventana o que le das información incongruente, mira este código:
El error está en decirle que el objeto Application es el encargado de destruir la ventana, pero despues te encargas tú por código de liberarla. Cuando termine tu programa el objeto Application intentará destruir el Form1, pero como ya está destruido.... Access violation. De la misma forma al cerrar esa ventana una y otra vez te dará un error de Abstract Error, (es lo más probable). Tienes que tener claro que el Parent de una ventana, por ejemplo, es solo para saber dentro de qué control se va a mostrar. El Owner (dueño) de un control/ventana es el que se encarga de destruirlo, y puede ser distinto al Parent (Padre). A ese código se suma otro error más. Cuando se hace el Form1.Free, la memoria se libera, pero la variable Form1 se queda apuntando a la zona de memoria donde estaba, por tanto, si vuelves a llamar a Form1.Free en compilación no da fallos, pero en Ejecución dará un Access Violation. Formas correctas: Se crea, pero nadie lo destruirá.... porque lo destruyo por código yo. El objeto se destruye cuando termina la aplicación, es decir, desde que se crea, hasta que finalice la applicación, el Form1 estará en Memoria. Hay otras formas, por ejemplo con ventanas modales, pero todo se resume a lo mismo: Indicar bien los Owner y tener controlado (conceptualmente) cuando y donde se destruyen las ventanas. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#7
|
|||
|
|||
Lepe muchas gracias tio, son estos pequeños conceptos que no se tienen del todo claros lo que diferencia el buen codigo del mal codigo.
__________________
noticiasfrikis, mi web de chorradas |
#8
|
|||
|
|||
Gracias a todos!
Vean, creo que por ahi va el asunto, porque yo creo un boton en tiempo de ejecucion, mi codigo es el siguiente:
|
#9
|
|||
|
|||
Y con este código lo mando destruir:
|
#10
|
|||
|
|||
Aqui, como puedo usar la excepcion que me pusiste como ejemplo?
Gracias, de verdad , mucha gracias por su ayuda! |
#11
|
||||
|
||||
Veo un detalle:
No veo lógico que uses el With NewBoton do y acto seguido modifiques el valor porque creas un Tlabel nuevo. Sugiero que muevas la frase With NewBoton do más abajo:
Por otra parte, cuando creas los labels, le dices que tiene un dueño, y realmente lo vas a destruir tú, pasale un "nil" mejor. Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 07-04-2006 a las 19:34:50. |
#12
|
|||
|
|||
Lo puse de esta forma :
Y al correr el ejecutable, manda una mensaje de error: stack overflow Y desaparece ese mensaje enseguida y no se abre el programa. ¿Sabes porque es esto? |
#13
|
|||
|
|||
ya vi, eso pasa cuando intento cambiar el with new boton, como tu me digiste de lugar.
Ahorita ya les puse nil a los TLabel en la creacion, el with new boton lo deje igual como lo tenia, no lo pude cambiar como tu me sugeriste. Pero sigue el error |
#14
|
||||
|
||||
Pues claro, fallo mio, perdona.
Al cambiar el with NewBoton do, la linea marcada la interpreta de forma distinta, Ahora está intentando cambiar el padre a ¡¡ la ventana !!. Al pasarlo abajo, hay que poner para todas las opciones del "case". Para futuras veces Stack Overflow es que la pila de llamadas se ha desbordado, esto suele ocurrir en funciones que se llaman a sí mismas en un bucle infinito, o bien que se pase del límite establecido para la pila. La verdad es que me desconcertó por unos segundos el tipo de error que daba . Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#15
|
|||
|
|||
Fijate que ya lo cambie, pero el error sigue
Lo deje asi:
Pero los errores siguen apareciendo, y no veo donde este mi error. ¿No hay forma de ocultarlos? |
#16
|
||||
|
||||
Quiero hacer una aclaración en cuanto a los owners.
Ciertamente, el Owner de un Component es quien se encargará de destruirlo, pero no significa que sea su prerogativa exclusiva. Un Component, aun con dueño puede ser destruido explícitamente sin mayores problemas. El destructor de TComponent hace esto:
Básicamente, cuando una componente se destruye, repasa su lista de componentes (los que posee), destruyendo cada uno. El código de arriba muestra que al destruirse, una componente se quita ella misma de la lista de componentes de su dueño, rompiendo, por así decirlo, el contrato de propiedad. Cuando ese dueño eventualmente se destruya, no tendrá a la componente en su lista y por tanto no habrá ningún intento por destruir algo que ya no existe. // Saludos |
#17
|
|||
|
|||
He puesto excepciones por todos lados, y no lo puedo ocultar, porque lo hace despues del ultimo end de la ejecucion, y espera que de nuevo presione o de un click en un label para volverlo a lanzar, pero no lo lanza siempre, por eso no puedo identificar cuando se lanza, es aleatorio.
Lo que yo quisiera seria que no los mostrara y que el sentido de mi programa siga como hasta hoy. ¿Se puede hacer esto? |
#18
|
|||
|
|||
Una pregunta, al correrlo paso a paso, me dice que el archivo:
ZAbstractRODDataset.pas no lo encuentra. ¿Si tiene esto algo que ver con mi problema? |
#19
|
||||
|
||||
no creo. aunque puede que sea una de las consultas de Zeos la que se vea afectada por el fallo del programa.
El problema está en el código, y quizás sea un efecto colateral de alguna de tus acciones, por eso es tan dificil de localizar. ¿Querer ocultarlo? Si vas en el coche y de repente se para, le vuelves a dar a la llave y sigue funcionando, ¿cómo se puede ocultar ese fallo? Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#20
|
||||
|
||||
Cita:
// Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Detener un error de access violation de la DbGrid - delphi..... | uper | Varios | 1 | 21-09-2005 22:54:42 |
Error Access Violation en Paquetes (Packages) | DarKraZY | OOP | 4 | 13-09-2005 15:35:31 |
Maldito ... Access violation Error (QuickReports) | User_baja1 | Impresión | 1 | 20-04-2005 11:29:32 |
Error Access Violation | samame | Conexión con bases de datos | 1 | 01-04-2004 11:48:10 |
Error Access Violation con Crystal 9 | samame | Impresión | 0 | 30-03-2004 15:03:17 |
|