gbx3 [3161]: warning: 2909 allocation(s) non freed. - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: General (https://gambas-es.org/forum-4.html) +--- Tema: gbx3 [3161]: warning: 2909 allocation(s) non freed. (/thread-114.html) Páginas:
1
2
|
gbx3 [3161]: warning: 2909 allocation(s) non freed. - kokodrilo - 21-09-2020 buenas este mensaje me sale al cerrar VisorRV1960 que exactamente quiere decir y que se puede hacer para remediar? el traductor dice esto: gbx3 [3161]: advertencia: 2909 asignaciones no liberadas. RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - vuott - 21-09-2020 ...un ''Objeto '' es la expresión concreta, fáctica de una Clase. La Clase es un modelo abstracto, por lo tanto en sí mismo inutilizable en el código. Para que la Clase pueda ser utilizada en el código, debe concretarse mediante una forma concreta: el Objeto precisamente. El Objeto, sin embargo, para que exista, debe ser creado. La palabra clave para crear un Objeto - por código - es generalmente "New ". Pero el Objeto, para poder ser creado, necesita una sustancia también concreta: la memoria. Por lo tanto, la creación de Objeto presupone el destino de parte de la memoria a la creación del Objeto. Esta parte de la memoria debe estar destinada exclusivamente a la estructura del Objeto, ya que, si no fuera exclusiva, el sistema podría utilizar las celdas de esta memoria para otros usos. ......imagínese, por ejemplo, qué desastre sería, si después de asignar un valor a una variable, el sistema, con el fin de realizar algunas otras operaciones, sobrescribiera las celdas de memoria donde se había escrito el valor de aquella variable !!! La asignación exclusiva de una porción de memoria, para escribir datos (que es exactamente lo que sucede cuando se crea un Objeto), se dice "to allocate" (no se si existe una palabra igual en español; en italiano es "allocare"). La asignación de memoria puede ser automática o arbitraria. Automática es la asignación realizada por el sistema sobre la base del tamaño predeterminado de la memoria a ocupar (por ejemplo, el tipo de datos Short de Gambas ocupará siempre 2 bytes de memoria. Esto significa que el sistema reserva automáticamente dos bytes de memoria). La liberación de la parte de la memoria reservada, relativa a una variable automática, se hará también de forma automática por el sistema. La asignación arbitraria se produce, por ejemplo, con la función "Alloc()", donde se debe/puede especificar por codigo el número de bytes de memoria a ocupar, a reservar. Cuando el sistema asigna (de manera automática o arbitraria) una porción de memoria, él sustrae esta parte de memoria del uso para otros usos. Esa parte de la memoria permanece destinada, dedicada solo y exclusivamente al propósito para el cual fue asignada. Por lo tanto, para que el sistema pueda volver a utilizar esa porción de memoria anteriormente reservada, debe ser liberada en las modalidades previstas por el lenguaje de programación utilizado. Cerrar un programa, todavía teniendo porciones de memoria reservadas para él, da lugar a un error "allocation(s) non freed ". Hagamos un ejemplo abstracto y extremo: imaginemos que todavía tenemos a disposición solamente 1000 bytes de memoria, y que nuestro programa los ha ocupado todos (reservados para sí). Cuando cerramos el programa, si no liberamos aquella parte de memoria anteriormente reservada (...es decir si no volvemos a poner la memoria a disposición de otros programas), nuestro ordenador quedaría bloqueado, porque tendría toda la memoria reservada, inutilizable ! ......no liberaste 2909 asignaciones de memoria que tu programa había reservado anteriormente para su recursos. RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - kokodrilo - 22-09-2020 excelente explicación pero como se libera la memoria? o como se haría esa tarea? cerré visor y gambas, abrí gambas y visor y cerré visor y me da gbx3 [23422]: warning: 165 allocation(s) non freed. RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - jguardon - 22-09-2020 ¿Desde cuándo ocurre ese problema? Tendrás que revisar los últimos cambios en tu código ya que es muy probable que provenga de algo reciente que hayas introducido en tu programa. Es muy difícil averiguar cualquier fallo de ese tipo sin tener una cronología. Saludos RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - vuott - 22-09-2020 Como has dicho jguardon hace falta saber cuáles y cuántos objetos, previamente creados, no han sido regularmente destruidos. A menudo ese tu error ocurre cuando has creado/abierto ventanas y luego no las has destruido/cerrado. RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - kokodrilo - 22-09-2020 esto es lo que me tira si de cero abro gambas y visor y cierro visor inmediatamente: gbx3 [8482]: warning: circular references detected: gbx3: 1 Fcapitulo gbx3: 1 HistoryVers gbx3: 1 Ffoco gbx3: 1 FMaxZ gbx3: 1 foco gbx3: 1 espacio gbx3: 1 aspell gbx3: 1 MaxZ gbx3: 1 GridViewSelection gbx3: 1 _GridView_Rows gbx3: 1 _GridView_Columns gbx3: 6 Spring gbx3: 1 ScrollArea gbx3: 1 GridView gbx3: 1 Connection gbx3: 28 Picture gbx3 [8482]: warning: 165 allocation(s) non freed. yo pensé que 'quit' se encargaba de matar los procesos y ventana gambas esta un poco errático, a veces cuando lo cierro me dice que hay cambios sin guardar en cierto formularios, cuando yo no hice ningún cambio en ellos. RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - vuott - 22-09-2020 warning: circular references detected Quizas tu programa cerra Objetos "Parent" pero sin cerrar su "Child" que han sido abierto anteriormente. https://sourceforge.net/p/gambas/mailman/message/13598355/ https://foro.gambas-es.org/viewtopic.php?t=6125&p=36660#p36660 https://www.gambas-it.org/smf/index.php?topic=2144.0 RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - kokodrilo - 23-09-2020 entonces Quit deberia llamarse ForceQuit y haciendo un array de procesos y añadimos las ventanas que se cargan, y cuando hacemos close en ella la eliminamos del array pero si en el evento close del formulario principal ahí hacemos un foreach para cerrar los procesos o ventanas que quedan abiertas, sino como se haría eso??? RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - jguardon - 24-09-2020 En mi opinión la instrucción Quit sólo debería usarse en casos muy puntuales y por algún motivo justificado. También en aplicaciones de terminal, pero en aplicaciones gráficas mi consejo es no usarlo nunca. Si hay que cerrar la aplicación, bastaría con cerrar el formulario principal en la mayoría de los casos y el sistema se encargará de recolectar los objetos creados a partir de la clase principal y destruirlos ordenadamente. Nunca lo he hecho, pero supongo que se puede llamar al Form_Close() del formulario principal desde cualquier otro formulario mediante una función pública o un evento creado ad-hoc. Saludos RE: gbx3 [3161]: warning: 2909 allocation(s) non freed. - kokodrilo - 24-09-2020 jguardon, el problema es el siguiente, tienes un formulario del cual pueden salir muchas ventanas en modo show entonces cierras la ventana principal de la aplicación y te quedan abiertas 3 o cuatro según el usuario las haya abiertos y queda desprolijo que tu programa este cerrado y queden ventanas ahí sin cerrar y ni te cuento si hay algún vídeo o audio ejecutándose o algún timer |