Newsgroup: it.comp.lang.delphi
Titolo: gestione grosso array

Ho la necessità d'impiegare un array di dimensioni elevate (100 kb di dati,
almeno) e quando la lancio in esecuzione l'app. va in crash. Sono sicuro che
il problema dipenda dalle dimensioni dell'array, poiché il problema non si
verifica quando ne riduco le dimensioni e l'app. crasha anche se le uniche
righe di codice sono la dichiarazione ed inizializzazione dell'array
(c[0]:='tantidati_"; c[1]:='tanti_dati'; etc.). Devo forse in qualche modo
aumentare le dimensioni di qualcosa con qualche direttiva al compilatore?
Grazie, Andrea.

 ha scritto nel messaggio
news:HuxYa.232078$lK4.6...@twister1.libero.it...

I computer attuali 100 kb di dati neanche li vedono, mi pare che si possano
indirizzare fino a 2GB di dati in ambiente 32bit dove gira normalmente
Delphi e non c'è nessuna direttiva del compilatore da abilitare per
raggiungere tale limite.
Prova a postare un po di codice così vediamo dov'è il problema.
Ciao
Giorgio

Il codice è semplicemente quello riportato sotto: si tratta, come già detto,
di una semplice dichiarazione ed inizializzazione di un array. L'errore è di
violazione d'accesso all'indirizzo (sempre lo stesso) 0040396A, write
address (non so cosa sia, ma l'addr. è pure sempre lo stesso) 004463b8.
L'immagine base è fissata a 00400000. Se cambio l'immagine base,
gl'indirizzi sopra menzionati aumentano di conseguenza, perciò avevo pensato
ad una sorta di overflow... Al posto di '90_cifre_che_non_riporto' va
qualcosa del tipo: '0544678784231545415789415489453456etc.';
procedure TForm1.Button1Click(Sender: TObject);
var
c : array[0..1518] of string;
begin
c[0]:='90_cifre_che_non_riporto';
//linee simili
c[1518]:='90_cifre_che_non_riporto';
end;
Grazie ancora, andrea

 Grazie ancora, andrea
Andrea

 end;
Guarda che non puoi usare il 1518 elemento

Guarda che non puoi usare il 1518 elemento
E chi l'ha detto ?
Se dichiaro:
a: array [0..X] of T;
posso gestire da a[0], a[1], ... a[X].
X non rappresenta il numero massimo di elementi, ma l'indice estremo.
-- 
Andrea Laforgia
Open Delphi Manual
http://groups.yahoo.com/group/delphi_open_manual/

 ha scritto nel messaggio
news:hxyYa.231783$Ny5.6...@twister2.libero.it...

Hai provato ad abilitare tutti i controlli di debug? in particolare R+ per
vedere dove viene richiesto un dato fuori dai range assegnati... Magari
l'errore lo mostra in un punto, mentre il bug è da un'altra parte e ti
"sporca" i dati buoni (creando casini a non finire)...
La memoria utilizzata non è eccessiva, anche se sarebbe molto più comodo per
te sfruttare un Tstringlist, che fa proprio questo lavoro.
Ciao
Matteo

 ha scritto nel messaggio
news:HuxYa.232078$lK4.6...@twister1.libero.it...

Prova questo codice e dici se funziona:
procedure TForm1.Button1Click(Sender: TObject);
var
  c : array[0..1518] of string;
  s:string;
  i:integer;
begin
  s:='';
  for i:=1 to 90 do
    s:=s+IntToStr(random(80)+10);
  for i:=0 to 1518 do
   c[i]:=s;
  LockWindowUpdate(Memo1.Handle); // blocca l'aggiornamento di memo1
altrimenti ci mette 20 anni
  Memo1.Clear;
  for i:=0 to 1518 do
    Memo1.Lines.Add(c[i]);
  LockWindowUpdate(0); // sblocca aggiornamento
end;
Ciao
Giorgio

 end;
Ciao
Mattei