linux user group brescia

immagine del castello

Archivio della mailing list

Arrays of Variable Length

Alessandro Bonometti bauno a inwind.it
Gio 11 Apr 2002 16:53:32 UTC
Luca Giuzzi wrote:

>> Mi spiegate che cosa intendete con "strutture a grandezza variabile"?
>> Probabilmente fraintendo, x' mi sembra stiate parlando di cose che in C
>> non esistono :)
>> 
> char *x;
> .
> 
> x=(char *)malloc(500);

Il cast sul puntatore restituito dal malloc() è inutile :)

> /* x[] e' un array di 500 caratteri */
> realloc(x,8192);
> /* adesso lunghezza di x[] e' 8192 caratteri */
> 
> 
> Quantomeno questo e' quello che io intendo come esempio banale
> `a lunghezza variabile'...

Ok, allora avevo capito bene, e non capisco come questo si ricolleghi al 
discorso fatto da Paolini e Colombini. Ossia: la struttura che contiene un 
char * non è affatto a dimensione variabile, e non bisogna affatto stare 
attenti con il sizeof(), in quanto la struttura ha una dimensione fissa, 
nota, che in questo caso comprende, ovviamente, la dimensione del puntatore 
(4 byte di soito), e non la grandezza dell'area di memoria da esso puntata.

In C non è possibile fare strutture di dimensione variabile, né sono 
previsti array di grandezza variabile. /Non/ si può, all'interno di una 
struttura, dichiarare un array la cui grandezza non sia nota a compile 
time. Posso avere all'interno delle strutture /puntatori/ che alloco 
dinamicamente a runtime, ma è un altro discorso.

Invito i contendenti a tenere presente la grossa differenza che esiste tra:

char stringa[20];
char *stringa="stringadiventi";
char *stringa=new char[20]; //c++

E a come varia la dimensione di una struct che li contenga.

Qualcuno mi fa un esempio basato su questa affermazione di Maurizio?

"E' possibile che l'ultimo campo di una struct sia
un vettore di lunghezza non prefissata... naturalmente poi non funzionano
varie cose, tra cui il "sizeof", ed il malloc deve essere fatto con 
attenzione calcolando la dimensione corretta del tutto."

X' a me sembra sbagliata nella premessa e nella conclusione (ma magari non 
capisco io :)

-- 
Bauno - "Molti nemici, molto onore"
``Gli specchi e la copula sono abominevoli, perché moltiplicano il numero 
degli uomini'' (JLB)



Maggiori informazioni sulla lista Lug