Buongiorno.
Lo standard C dice che:
- per variabili con static storage duration, ovvero le globali e le locali static, se non viene specificata un'inizializzazione esplicita vengono inizializzate a zero;
- in tutti gli altri casi, nascono "non inizializzate", il che significa che è "undefined behavior" accedervi in lettura prima di averci scritto qualcosa.
Domanda: "undefined behavior", incluso cacciarsi "casualmente" proprio dentro nullptr?
Mi sembra strano, stranissimo, ... avrei negato la cosa... ed è il motivo della mia domanda.
Ma se così non fosse, non mi spiego perchè accade quanto segue:
int *p;
cout<<*p<<endl;
funziona, dando una risposta a casaccio (ok: il puntatore non inizializzato, contiene un intero qualsiasi, a caso)
Ad esempio: -125990072
Invece, inserendo inutili e inutilizzate variabili in testa, tanto per "sporcare" un po'lo stack, Xcode mi butta fuori:
int a;
int b;
int *p;
cout<<*p<<endl;
Il compilatore (sto usando Xcode, su mac) dice che l'interruzione è sul primo thread, dando questo messaggio d'errore:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
Xcode, a margine, indica il contenuto dentro le celle a, b come interi casuali (mi sembra normale), ma il suo problema è leggere il contenuto di p, perchè ora p punta a NULL.
Secondo lui (con copia e incolla da Xcode)
p = (int *) NULL
Mi sembra così strano che, "casualmente", si cacci proprio lì dentro... che chiedo conferma!
Grazie
PS ho inserito qui la mia domanda. Corretto? C'è un link migliore? Ari-Grazie.
Buona giornata.
Claudia C.