FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#10
|
||||
|
||||
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:
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, |
|
|
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 |
|