2010-04-24 2 views
1

을 작동하지 않습니다 다음 내가 디버거에서 실행할 때 나에게 SIGABRT를 제공하십시오파일을 읽을 문자열을 사용하여 - 엑스 코드


std::ifstream inFile; 

inFile.open("/Users/fernandonewyork/inputText.txt");  

cout << inFile << endl; 

vector<string> inText; 

if (inFile) { 
    string s4; 

    while (inFile>>s4) { 
     inText.push_back(s4); 
    } 

} 
inFile.close(); 

를 다음을 수행합니다


std::ifstream inFile; 

inFile.open("/Users/fernandonewyork/inputText.txt");  

cout << inFile << endl; 

vector<string> inText; 

if (inFile) { 
    string s4("This is no lnger an empty string"); 

    while (inFile>>s4) { 
     inText.push_back(s4); 
    } 

} 
inFile.close(); 

나는 공간 고려 사항에 대해 걱정할 필요없이 단순히 s4를 사용할 수 있었다는 인상을 받고 있었습니까? 이것은 내가 가기 코드에서 얻을 전체 오류입니다 :

의 malloc : * 객체 0x100010a20에 대한 오류 : "SIGABRT"포인터가 프로그램을 디버깅 할 수 malloc_error_break에 중단 점 신호를 수신 설정 * 할당되지 않은 해제된다.

+0

공간을 할당하기 위해 s4를 null로 설정해 보셨습니까? –

+0

이 코드가 모두 있습니까? 문제는 여기에서 일어나지 않는 것처럼 보이지만,이 부분은 괜찮아 보입니다. 또한's4'를 초기화 할 필요도 없습니다. – jweyrich

답변

1

이 지독한 버그는 an earlier question에 포함되었다 :

솔루션 :

설정하여 전 처리기 매크로에

_GLIBCXX_FULLY_DYNAMIC_STRING=1 

목표에 정보 탭을 구축 할 수 있습니다.

프리 프로세서 매크로 필드 (프로젝트 설정?)가있는 또 다른 설정 창이 있지만 설정해도 아무 효과가 없습니다.

- 음,이 문제는이 문제와 다소 다르지만 아이러니하게도 증상은 더 일반적입니다.

+0

위의 설정 (_GLIBCXX_FULLY_DYNAMIC_STRING = 1)을 적용하면 문제가 해결되었습니다. 두 버전의 코드가 모두 작동합니다. – Fernando