So che Visual Studio con le opzioni di debug riempirà la memoria con un valore noto. g ++ (qualsiasi versione, ma gcc 4.1.2 è la più interessante) ha qualche opzione che dovrebbe riempire una struttura POD locale non inizializzata con valori riconoscibili?È possibile riempire g ++ variabili POD non inizializzate con valori noti?
struct something{ int a; int b; };
void foo() {
something uninitialized;
bar(uninitialized.b);
}
Mi aspetto che il uninitialized.b
sia una casualità imprevedibile; chiaramente un bug e facilmente trovato se l'ottimizzazione e gli avvisi sono attivati. Ma compilato con solo -g, nessun avviso . Un collega aveva un caso in cui il codice simile a questo funzionava perché lo stesso aveva un valore valido; quando il compilatore è stato aggiornato, ha iniziato a fallire. Pensava che fosse perché il nuovo compilatore stava inserendo valori noti nella struttura (molto il modo in cui VS riempie 0xCC). Nella mia esperienza personale, erano solo diversi valori casuali che non erano validi.
Ma ora sono curioso - c'è qualche impostazione di g ++ che potrebbe riempire la memoria che lo standard direbbe altrimenti dovrebbe essere non inizializzata?
Non credevo che la funzione esistesse, ma il manuale di gcc è lungo e profondo, e sono rimasto sorpreso da ciò che è nascosto lì prima. –