Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo 22-12-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola,

Disculpen que me meta pero va a ser necesario bajar más a tierra las cosas que expones. Si nos describes al menos la parte en que asignas y liberas memoria y la definición de los tipos podríamos ver en donde está la falla. De otro modo estaríamos adivinando en que parte de todo tu código que te resignas a mostrar está el error.

Lo que en todo caso deberías hacer es realizar un seguimiento o traza a tu código añadiendo breakpoints y evaluando paso a paso como se comporta hasta hallar el problema. O en todo caso deja al sistema que se ejecute hasta encontrar el error y la línea. Ya con eso se puede saber más o menos donde estaría el problema. Esa es la UNICA manera de saber donde está el problema.

Por otro lado ¿Porqué utilizar lista de punteros a la vieja escuela? ¿Es un requisito u obligación? Porque Delphi ya cuenta con clases que cumplen perfectamente con las funciones de listas... entre ellas la clase TList.

Con ello te evitas cualquier problema de liberación y asignación... la clase ya cuenta con los métodos necesarios, solo debes hacer uso de la clase.

Ahora, la segunda pregunta, ¿Qué sentido tiene hacer una conversión de lista a un array? ¿Porqué no directamente operar sobre el array?

Aviso que trabajar con arrays dinámicos como este:

Código Delphi [-]
type
TArray = array of integer;

Tiene sus inconvenientes. Por empezar, cuando uno redimensiona con SetLength() lo que hace es copiar el array en un zona temporal, redimensionar y volver a volcar el contenido del array temporal.

Por tanto cuanto más grande sea el array más lento será el acceso a memoria.

En lo posible debe evitarse estar redimensionando los arrays, en todo caso se puede ganar algo de eficiencia volcando los contenidos en un array auxiliar del tamaño indicado y luego al finalizar o a medida que los cálculos se van ejecutando ir liberando memoria.

Si bien internamente SetLength() trabaja con llamadas a GetMem y FreeMem, si se está trabajando con arreglos muy grandes es mejor trabajar directamente con GetMem y FreeMem y reservar un espacio de memoria y operarla como si se tratase de un arreglo. Se gana más, aunque es un poco más lioso en términos de código.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con punteros waremovil C++ Builder 2 18-08-2007 18:47:19
Liberación de memoria de punteros Data de un Tree. afxe Varios 5 20-06-2007 17:12:34
Memoria virtual para grandes matrices JF Sebastian OOP 2 30-01-2007 20:11:41
Problema con matrices que no logro resolver galmacland Varios 11 20-06-2006 19:03:45
sobre punteros... y memoria ¿Como perder su valor, sin hacerlo? Delphius Varios 8 19-04-2006 10:55:06


La franja horaria es GMT +2. Ahora son las 05:02:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi