2012-03-26 3 views
3

STL 벡터의 내용을 C 문자열로 반환하는 vect_dbg(vector<int>) 함수를 테스트 중이므로 gdb output vect_dbg(test)으로 호출하거나 시계.gdb 함수에서 로컬 범위의 std :: vector를 호출하면 오류가 발생합니다.

#include<vector> 
using namespace std; 

int main() 
{ 
    vector<int> test; //breakpoint; output vect_dbg(test) ends debugging. 
    for (int i=0;i<=10;i++) test.push_back(i); 
    return 0; 
} 

#include<sstream> 
const char* vect_dbg(const vector<int> &V) 
{ 
    stringstream ss; 
    for (int i=0;i<V.size();i++) 
     ss<<"V["<<i<<"]:"<<V[i]<<' ;'; //line 16 
    static char sEnu[256]; 
    ss.getline(sEnu,256); 
    return sEnu; 
} 

불행히도 output vect_dbg(test)은 디버깅을 중단합니다.

GDB의 이라는 함수에서 디버깅중인 프로그램에 신호가 보내졌습니다. GDB는 호출하기 전의 컨텍스트를 복원했습니다. 이 동작을 변경하려면 "set unwindonsignal off"를 사용하십시오. 함수 (vect_dbg (std :: vector> const &)가 포함 된 표현식의 평가가 취소됩니다. 프로그램 수신 신호 SIGSEGV, 세그먼트 오류. MAIN.CPP에서 vect_dbg (V = @ 0x22ff34)에 0x004014b1는 16

나는 test 글로벌 만들 경우이 기능이 작동 발견,하지만 난 로컬로 정의 된 벡터에 대한 해결책을 알아낼 수 없었다. 어떻게 해결할 수 있을까요? 많은 감사합니다.

편집 : 주로 해결, 대답은 꽤 분명했습니다, 벡터는 중단 점에서 초기화되지 않았습니다. 이제 vect_dbg에서이를 감지 할 수 있는지 궁금합니다. 내가 찾은 대안은 vector<int>을 정적이라고 선언하는 것입니다.

답변

3

한 줄 끝에서 중단 점을 넣습니다 (for 루프에서). 변수 test은 사용하려고 할 때 아직 초기화되지 않았습니다.

+0

당신이 말하는 것을 알아 내는데 시간이 걸렸습니다. 중단 점에 도달하면'test' 생성자가 아직 실행되지 않았습니다. –

+0

네 말이 맞아. 고마워. 내가 처음 시도한 것을 기억하는 것은 이상한 일이다. – algotroll

관련 문제