2011-01-15 5 views
6
에서 반환 할 때 다음과 같은 사소한 코드 세그먼트 오류를 ​​생성하는 이유가 궁금했는데

주() :분할 오류

//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; 
} 

흥미롭게도 1) 두 변수 중 하나만 선언 된 경우 오류가 발생하지 않습니다. 2) 벡터 멤버가있는 개체 대신 벡터 변수를 선언하면 모든 것이 잘됩니다. 3) ifstream 대신 ofstream을 선언하십시오. 다시 말하지만, 모든 것이 잘 작동합니다. 이 특정 조합에 문제가있는 것 같습니다 ...

이 오류는 컴파일러 버그 일 수 있습니까? Cygwin에서 gcc 버전 3.4.4를 사용합니다.

미리 감사드립니다.

가볼

+8

gcc 3.4.4는 고대입니다. 4 시리즈로 시도해 볼 수 있습니까? –

+0

버그 리포트가 비슷한 것을보고 기억하지만 정확히 찾을 수 없으므로 기억이 안납니다. 그러나 나는 이것이 고정되어있는 애매한 버그라고 확신한다. – GManNickG

+0

어서 오세요. 나는 3.0이 최첨단이었을 때를 기억한다. gcc 2.95/2.96 이제 gcc 컴파일러가 생겼습니다. 난 그냥 g에서 프로그램을 컴파일하려고 –

답변

4

이것은 버그입니다. 이것이 전체 프로그램이라면, 아무 문제가 없습니다. 컴파일러 또는 표준 라이브러리에서 버그를 발견했습니다. 의견에서 추천 한대로, 4.x 시리즈 gcc 컴파일러를 사용해보십시오. 3.x 시리즈는 언덕처럼 오래되었습니다.

+0

신속한 답변/의견을 보내 주셔서 감사합니다. 불행히도,이 경우 컴파일러를 업그레이드하는 것은 간단한 문제가 아닙니다. 나는 Allegro 게임 라이브러리에 의존하는 Tscope라는 C 라이브러리로 심리학 실험을 개발 중입니다. Tscope는 cygwin 환경, gcc 컴파일러, 기본 IDE 등으로 미리 패키징되어 있습니다. 문제는 다음과 같습니다. Allegro는 더 이상 최신 cygwin에서 컴파일하지 않습니다. 그리고 나는 gcc.exe를 대체하는 것이 효과적 일 것이라고 믿지 않습니다. –

+0

@ Gábor Kovács - 아니, 충분하지 않을거야. 하지만 Cygwin에는 선택적으로 업그레이드 할 수있는 패키징 시스템이 있다고 생각합니다. 그래서 당신은 그것을 시도 할 수 있습니다. – Omnifarious