so che funziona e so anche che non dovrebbestrano
![]()
so che funziona e so anche che non dovrebbestrano
![]()
*********************************
Andrea
*********************************
In teoria è questo il modo per definire un array statico.Originariamente inviato da nik600
è giusto che funzioni, ma il problema è quando cerchi di assegnare un valore acodice:int a; int b[a]; b[0]=1; b[1]=2; b[2]=3;
b[x] quando x è un valore > di a al momento della creazione di b[a]
potresti ottenere un errore di memoria se vai a scrivere su cose che non sono tue, o, ancora peggio, potresti andare a cambiare il valore di alcune altre variabili all'interno del tuo programma
Oppure :codice:const int a = 2; int b[a]; b[0]=1; b[1]=2; b[2]=3;
Il fatto di poter superare, con le assegnazioni, il limite dell' arraycodice:#define a 2 int b[a] b[0]=1; b[1]=2; b[2]=3;
è solo un tipico errore di programmazione in C/C++...
In fin dei conti la variabile 'b' è solo il riferimento al
primo elemento dell' array b[].
I compilatori non eseguono nessun controllo di superamento di
questo limite.
Questa pratica di superare i limiti è utilizzata per
numerosi 'exploit' che si basano sul 'buffer owerflow',
ricordate il worm 'Sasser' (ad esempio) che con un espediente
simile riusciva a sovrascrivere lo stack e iniettare codice
maligno nell' area di memoria interssata dal processo che è
in esecuzione come system.
Quindi il Gcc in questo frangente:
Credo che di fatto allochi memoria per un array ad un solo elemento, equivalente a :codice:int a; inb b[a];
codice:int b[1];
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.