Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Array dimensione variabile
Forum - Pascal - Array dimensione variabile

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Convinto che array di lunghezza variabile non esistessero in pascal mi ero quasi arreso alla impossibilità di ottenere campi di lunghezza variabile nei giochetti che programmo. Leggendo però la documentazione di FPC ho trovato una procedura setlength(array,dimensione_a,eventuale_dimensione_b) mi sono risollevato. L'ho implementato nel pacman che sto sviluppando per mi restituisce un errore in fase di runtime. Se setto la dimensione_a <= dimensione_b il programma crasha. La prima dimensione deve essere sempre maggiore della seconda. Non me lo so spiegare?!

PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 0:11
Mercoledì, 07/07/2010
mmmh... questa non la sapevo neanche io... anzi grazie per l'informazione mi potrà essere molto utile...

Sinceramente non so cosa possa essere però così a occhio mi chiedo: potrebbe essere il fatto che non può distruggere da solo delle parti di array che erano state settate?
cioè intendo, quei valori dell'array compresi tra dimensione iniziale e finale potrebbero essere un problema?
prova ad annullare quei valori con qualcosa come
mioarray[5{o quello che sia}] := null
o qualcosa del genere...
Fammi sapere perchè mi interessa l'argomento.:asd:

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 0:30
Mercoledì, 07/07/2010

prima di sparare senza collegare le dita al cervello leggete le reference per favore:

http://www.freepascal.org/docs-html/ref/refsu14.html

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:02
Mercoledì, 07/07/2010
Beh, dopo averlo letto per la quarta volta continuo a non riuscire a trovare dove mi spiega perchè ottengo:
Codice sorgente - presumibilmente Pascal

  1. An unhandled exception occurred at $0040C844 :
  2. EAccessViolation : Access violation
  3.   $0040C844
  4.   $00401D28



quando faccio:
setlength(A,10,22);

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 1:03
Mercoledì, 07/07/2010
Testo quotato

Postato originariamente da Giarados:

Beh, dopo averlo letto per la quarta volta continuo a non riuscire a trovare dove mi spiega perchè ottengo:
Codice sorgente - presumibilmente Pascal

  1. An unhandled exception occurred at $0040C844 :
  2. EAccessViolation : Access violation
  3.   $0040C844
  4.   $00401D28



quando faccio:
setlength(A,10,22);



semplicemente perchè NON è detto che la memoria oltre il boundary dell'array già allocato sia tua :)

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:45
Mercoledì, 07/07/2010
Scusa, ma il setlength non serve ad allocare la memoria per contenere i valori contenuti negli array? ergo, se non funziona in questo modo allora come faccio ad ottenere un array di dimensione variabile?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 2:02
Mercoledì, 07/07/2010

ricordati che l'array va dichiarato senza bounds, così il compilatore capisce che si tratta di un array dinamico

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 13:21
Mercoledì, 07/07/2010
beh, io lo dichiaro come

vettore:array of array of byte;

PM Quote