Mi piacerebbe capire cosa succede quando si aumenta la dimensione di un array dinamico.Cosa succede quando si aumenta la dimensione di un array dinamico?
mia comprensione finora:
- esistenti elementi dell'array rimarranno invariati.
- I nuovi elementi di matrice vengono inizializzati su 0
- Tutti gli elementi di matrice sono contigui nella memoria.
Quando la dimensione dell'array viene aumentata, la memoria aggiuntiva verrà aggiunta al blocco di memoria esistente oppure gli elementi esistenti verranno copiati in un blocco di memoria completamente nuovo?
La modifica della dimensione di un array dinamico ha conseguenze per i puntatori che fanno riferimento a elementi di array esistenti?
Grazie,
[modifica] presupposto errato depennata. (I nuovi elementi della matrice vengono inizializzati a 0)
[La documentazione è stata modificata il 26 ottobre] (http://docwiki.embarcadero.com/VCL/e/index.php?title=System.SetLength&diff=414648&oldid=411229), quindi l'elemento barrato è ora corretto : "lo spazio appena assegnato è impostato su 0 o zero." –
La domanda è in che versione di Delphi è stata introdotta? Il documento a cui @Rob è collegato è Delphi XE, ma posso vedere la chiamata FillChar (quella che Rob ha menzionato nel suo commento alla mia risposta) anche nella procedura DynArraySetLength di D2009 ... –
Lo spazio appena allocato è stato effettivamente inizializzato a 0 o zero zero almeno da D5 in poi (è quello che potrei facilmente controllare). Vedi aggiornamento alla mia risposta. E probabilmente dall'introduzione di array dinamici come @David ha commentato la mia risposta. –