2011-01-15 13 views
6

mi sono chiesto il motivo per cui il codice di banale seguente produce un errore di segmentazione quando ritorno da main():Segmentation fault al ritorno dalla principale (codice molto breve e semplice, nessun array o puntatori)

//Produces "Error while dumping state (probably corrupted stack); Segmentation fault" 

#include <iostream> 
#include <fstream> 
#include <vector> 
using namespace std; 

class Test 
{ 
    vector<int> numbers; 
}; 

int main() 
{ 
    Test a; 
    ifstream infile; 

    cout << "Last statement..." << endl; // this gets executed 
    return 0; 
} 

È interessante notare che 1) se viene dichiarata solo una delle due variabili, non viene visualizzato l'errore, 2) se dichiaro una variabile vettoriale anziché un oggetto con un membro vettoriale, è tutto ok, 3) se io dichiarare un ofstream invece di un ifstream, di nuovo, tutto funziona bene. Qualcosa sembra essere sbagliato con questa combinazione specifica ...

Potrebbe essere un bug del compilatore? Io uso gcc versione 3.4.4 con cygwin.

Grazie per i suggerimenti in anticipo.

Gábor

+8

gcc 3.4.4 è antico. Puoi provare con la serie 4? –

+0

Ricordo di aver visto un bug report con qualcosa di simile, non riesco a ricordare esattamente però così non riesco a trovarlo. Ma sono abbastanza sicuro che questo è un bug oscuro che è stato risolto da allora. – GManNickG

+0

Vieni, vieni. Ricordo quando 3.0 era all'avanguardia. Ora gcc 2.95/2.96 ora c'era un compilatore vecchio e stravagante. –

risposta

4

Questo è un bug. Se questo è il tuo intero programma, non c'è assolutamente nulla di sbagliato in esso. Hai scoperto un bug nel compilatore o nella libreria standard. Come ti è stato raccomandato nel commento, prova un compilatore gcc della serie 4.x. La serie 3.x è vecchia come le colline.

+0

Grazie mille per le risposte/commenti rapidi. Sfortunatamente, l'aggiornamento del compilatore non è semplice in questo caso. Sto sviluppando un esperimento di psicologia con una libreria C chiamata Tscope, che dipende dalla libreria di giochi di Allegro. Tscope viene fornito con un ambiente cygwin, un compilatore gcc, un IDE di base, ecc. Il problema è: Allegro non si occupa più del cygwin più recente. E non credo che la sola sostituzione di gcc.exe funzionerebbe, vero? –

+0

@ Gábor Kovács - No, non sarebbe sufficiente. Ma credo che Cygwin abbia un sistema di packaging che ti permetta di aggiornare in modo selettivo. Quindi potresti provarlo. – Omnifarious

Problemi correlati