Me gustaría entender qué sucede cuando se aumenta el tamaño de una matriz dinámica.¿Qué ocurre al aumentar el tamaño de una matriz dinámica?
Mi entendimiento hasta el momento:
- elementos de la matriz existentes permanecerán sin cambios.
- Los nuevos elementos de la matriz se inicializan en 0
- Todos los elementos de la matriz están contiguos en la memoria.
Cuando se aumenta el tamaño de la matriz, ¿se insertará la memoria adicional en el bloque de memoria existente o se copiarán los elementos existentes en un bloque de memoria completamente nuevo?
¿Cambiar el tamaño de una matriz dinámica tiene consecuencias para los punteros que hacen referencia a los elementos de matriz existentes?
Gracias,
[editar] suposición incorrecta ponchó. (Elementos de nueva matriz se inicializan a 0)
[La documentación cambió el 26 de octubre] (http://docwiki.embarcadero.com/VCL/e/index.php?title=System.SetLength&diff=414648&oldid=411229), por lo que su elemento tachado ahora es correcto : "el espacio recientemente asignado se establece en 0 o nulo". –
La pregunta es en qué versión de Delphi se presentó esto? El documento al que @Rob vinculado es para Delphi XE, pero puedo ver la llamada de FillChar (la que Rob mencionó en su comentario a mi respuesta) en el procedimiento DynArraySetLength de D2009 también ... –
El espacio recientemente asignado se ha inicializado a 0 o cero cero al menos desde D5 en adelante (eso es lo que podría verificar fácilmente). Ver la actualización de mi respuesta. Y probablemente desde la introducción de arreglos dinámicos como @David comente mi respuesta. –