![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#41
|
|||
|
|||
|
Es una aplicación heredada... y el k la empezó no esta xD
Tiene más de 40 formularios y bastante densos. Por lo que he visto normalmente se usa el formulario.... se crea y se destruye. Por eso sigo con la misma tónica , lo creo hago sus cositas y al cerrar lo destruimos. salu2 radge |
|
#42
|
|||
|
|||
|
Lo que si que noto que contra más mano le meto.. mas veo de estos
Access violation at address 00000000. Read of Address 00000000 |
|
#43
|
|||
|
|||
|
Si no fueses un profesional te diria q me pasaras el codigo para echarle un vistazo
pero asi X). Me da q va por alli, por lo de forms no liberadas y vueltas a referenciar con la misma variable...ya contaras algo, saludos ![]() |
|
#44
|
|||
|
|||
|
Esos anteriores, claro esta son de objetos o bien liberados y reusados, o bien no creados. Si, como antes, estas liberando antes de usar cosas como el TBookMarkStr, que es una string, te saldran montones de ellos.
|
|
#45
|
|||
|
|||
|
Gracias eso del string ya lo arregle xD la verdad que llevo varios años programado pero acabo de empezar con delphi 5 en esta empresa y con un proyecto... grande que lleva varios años en desarrollo y no veas como pillo xD
gracias , radge |
|
#46
|
|||
|
|||
Última edición por radge fecha: 24-07-2008 a las 12:38:47. |
|
#47
|
|||
|
|||
|
Os muestro el codigo retocado , a ver si alguien consigue ver algo que ando "borracho" de tanto mirar el mismo formulario , aki os he dejado los cambios hechos , a ver si entre todos lo vemos.
muchas gracias , radge |
|
#48
|
|||
|
|||
|
por ejemplo, aqui se crea, pero se libera correctamente? si no se hace, pasa lo mismo que antes...que se queda en memoria la anterior pues se usa la misma variable global para referenciarla.
|
|
#49
|
|||
|
|||
?, interpretais la sentencia sql? es bastante un nido de bugs esto radge ![]() (mejor del BookMarkStr, el getbookmark, gotobookmark y freebookmark)
lo mismo que antes, mejor usar tal cual la f, el f := TFrmunidadesPedidoventa.create, que sea f variable local, el f.free en vez del freeandnil etc...yo crearia todas las forms asi, tal como ya te habia comentado. El error fijo q esta por estas cosas, por crear todo con variables globales y luego volviendolo a crear con el mismo nombre de variables sin liberar las anteriores. saludos ; ) |
|
#50
|
|||
|
|||
|
Gracias sigo probando... una cosa tengo 2 problemas a ver si vosotros sabeis.
El 1º es que al debugar me salta dentro de las funciones nativas , eso debe ser alguna opcion que habilite y no recuerdo cual es. La 2º duda k tengo es que ahora no me funciona lo siguiente : si selecciona una linea o texto , y le doy al suprimir o la tecla encima del return me "corre" las lineas pero no me las borra. gracias radge |
|
#51
|
|||
|
|||
|
Cita:
Esto es un boton que desde el form principal abre otro formulario , pero solo si lo llamo... que de momento esta deshabilitado asi k no creo que venga por aki , de todas formas el formulario lo tendria k destruir desde el mismo en el evento onclose no ? Otra cosa... lo del famoso formulario
No creo que falle por aki , pk he borrado completamente estas lineas y sus referencias a el y sigue dando el mismo error. Asi k seguimos buscando ! salu2 radge |
|
#52
|
|||
|
|||
|
si, pero como te decia...si estas creando TODAS LAS FORMS de tu proyecto usando un solo nombre de variable para cada clase, sin liberar las anteriores y reusando ese nombre de variable, se te queda la anterior creada desreferenciada en memoria.
|
|
#53
|
|||
|
|||
|
Código:
Application.CreateForm (TfrmPrintPedidosSupervisados, frmPrintPedidosSupervisados); frmPrintPedidosSupervisados.ShowModal; end Cita:
|
|
#54
|
|||
|
|||
|
Lo siento llevo 2 semanas con delphi y no entiendo muy bien lo que dices.
Mira tengo la siguiente estructura Formulario principal frmMain Formstyle : fsMDIForm Desde el cual tengo un botton a frmsupvision con el siguiente codigo
Entonces abro el formulario supvision que tiene estas caracteristicas: frmsupvision formstyle : fsMDiChild Y desde este si es necesario llamo a frmUnidadespedidoVenta formstyle : fsNormal Última edición por radge fecha: 25-07-2008 a las 17:02:59. |
|
#55
|
|||
|
|||
|
El evento onclose de un form no destruye el formulario, solo lo cierra. Si tu destruyes un form, este destruye todos los componentes que la tienen en su propiedad parent.
lo que estas haciendo ahora mismo es esto: f : objeto ... f := crear_objeto; f.Trabajamos f.Cerramos (PERO NO DESTRUIMOS!) ... y, al cabo de un rato, usando la misma variable f := crear_objeto (*1) f.Trabajamos f.Cerramos (sin destruir otra vez) si te fijas, en (*1) hemos perdido el valor anterior de f, el cual es un puntero a un objeto, y por lo tanto, tanto el puntero como el objeto quedan aun cargados y bloqueados en memoria, pero ya no se pueden localizar, por lo que tras sucesivas llamadas la memoria se te va a ir llenando hasta ya no poder cargar nada mas. Imagina que en la primera asignacion f fuese 0x00100 ocupando 200; en la segunda vuelta ponemos a f := 0x00300 ocupando 200 mas: la direccion de 0x00100 a 0x00300 se nos queda bloqueada y peor aun, sin poder acceder a ella. Vamos, que nos quedamos sin memoria. Por eso te salta a las 30 o 40 veces. Mira, cuando te salte el error, el administrador de tareas cuanta memoria estas consumiendo, o bien un administrador de memoria (por internet los hay de buenos). La gracia de las variables locales es precisamente que tienes controlado cuando las llamas y cuando las destruyes: solo usaras ese nombre mientras este usandose la form, y nadie mas en el programa la usaria. Si son forms de las que solo necesitas una instancia a la vez, lo mejor es usar el autocreate y llamarlas directamente con el showmodal, olvidandote de crear de nuevas en todo el proyecto: creas todas las del proyecto que seguro necesites y las llamas. Las que no, las creas LOCALMENTE, usas, y destruyes tambien localmente. Lo de TForm1.Create(parent) es para q cuando se destruya el parent, tambien se destruya el objeto creado. otro ejemplo : en un proyecto tengo dos classes, TForm1, TForm2 con dos instancias con el autocreate : Form1, Form2. Imagina que en el form1 hay 2 botones.
pruebalo, veras que los 2 parece que funcionan igual, pero no. Puesto que tal como te habia dicho, en el segundo estamos sobreescribiendo las variables globales Form1 y Form2 con nuevos objetos tipo TForm1,TForm2, perdiendo los anteriores por memoria, mientras que en el primero estamos creando nuevas instancias sin perder sus referencias. En el caso de poner Form1.Free, Form2.Free despues del showmodal, tendras el inconveniente de eliminar todas las instancias (aunque no se liberarian las forms anteriores, pues se quedaron desreferenciadas) que hay en el proyecto. En tu caso, seria lo correcto, siempre que no se llamen ni a ninguna propiedad ni funcion sin crearlas anteriormente, vamos, siempre que no estes usando la variable global sin crearla anteriormente. Última edición por coso fecha: 25-07-2008 a las 17:51:30. |
|
#56
|
|||
|
|||
|
He probado lo siguiente ya os comentaré si falla o no.
Lo que si que me salen son muchos errores de escritura. ![]() ![]() |
|
#57
|
|||
|
|||
|
Os vuelvo a dejar el codigo con los cambios descritos arriba por el compañero , sigue fallando ;(
de todas formas gracias
|
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Error Raro sobre archivo "ntdll.dll" que no consigo encontrar el motivo | AGAG4 | Impresión | 1 | 23-11-2007 07:11:17 |
| localizar un registro | vroa74 | Conexión con bases de datos | 3 | 17-08-2007 14:11:23 |
| Localizar un registro | alcides | Varios | 4 | 13-04-2007 20:17:27 |
| Localizar datos con Firebird | joanajj | Firebird e Interbase | 5 | 06-06-2006 00:11:42 |
| RaveReport AccessViolation | raugadel | Impresión | 0 | 03-11-2005 15:32:56 |
|