Quote:
Originariamente inviato da sottovento
Cosa ti hanno fatto le zone di memoria non inizializzate? Basta che siano valide, no?
Codice:
scanf("%s", (char *)0x800000);

|
Ci sono diversi casi che mi vengono in mente per il codice postato da ing.
Se il compilatore capisce che quella è una stringa vuota e quindi non alloca area nella regione testo allora quel puntatore chissà a cosa è inizializzato (sarebbe curioso fare una print del puntatore).
Se viceversa il contenuto di input si trovasse nella regione dati non modificabili, in teoria il programma dovrebbe crashare in quanto area read-only...
Detto ciò un programmatore dovrebbe sempre sapere cosa sta facendo, quindi dovrebbe allocare la giusta memoria che gli occorre senza sperare che l'implementazione di turno lo grazi.
Tanto per la cronaca comunque, in sistemi con ALSR e randomizzazione dello spazio degli indirizzi (tutti i sistemi Linux moderni ce l'hanno attiva di default) non si può fare affidamento agli indirizzi di memoria logici in quanto cambiano da un esecuzione all'altra del codice (uno dei meccanismi di protezione da buffer overflow e quant'altro).
Edit: provato ora il programma di ing...
Codice:
giulio@server:~/Programs/ing$ ./a.out
F01 VM, v1.0
=>exit
Segmentation fault
Come prevedibile la stringa è in una regione dati non modificabili.