2011-01-01 5 views
1

내 C++ 프로그램을 컴파일하고 난에서이 함수를 호출 할 때까지 작동) (주 :"프로그램에서 발생하는 액세스 위반 (Segmentation Fault)."

int uword(){fstream infile("numbers.txt"); 
fstream exfile("wordlist.txt"); 
string numb[numoflines]; 
string lines[numoflines]; 
number = 1; 
line = 1; 
for(int i=0;i<numofline;++i) 
    { 
    getline (infile,number); 
    numb[i] = number; //I think this is causing the problem 
    getline (exfile,line); 
    lines[i] = line; //This too 
    } 
infile.close(); 
exfile.close();  
string yourword; 

뭔가 여기가 제기 액세스 위반 (분할 오류) "로 팝업 디버그에, 그것은 충돌을 일으 킵니다 당신의 프로그램. "

편집 : 내 실수는 for 루프에! infile.eof를 사용하는 것입니다.

+0

입력 루프가 잘못되었습니다. GMan은 [C++ FAQ 질문 중 하나에 대한 답변]에서 입력을 적절히 처리하는 방법에 대한 좋은 설명을주었습니다 (http://stackoverflow.com/questions/4258887/semantics-of-flags-on-basic-ios/4259111# 4259111). –

+0

! infile.eof()를 i <= numoflines로 변경하면 (동일한 작업을 수행해야 함) 여전히 오류가 발생합니다. 제 생각에 그것은 당신이 당신의 언급을 의미했던 것입니다. – Mark

+0

당신은 i

답변

1

getline 기능은 작동한다고 생각하는 방식으로 작동하지 않습니다.

또한 infilenumoflines 개 이상의 줄이있을 수 있습니다.

+0

'getline'의 올바른 사용법을 자세히 설명해 주시겠습니까? numoflines는 파일에 몇 줄이 있는지에 의해 이전에 계산되었습니다. – Mark

+0

@ 마크 :'man 3 getline'을보세요. C'FILE *'핸들과 함께 사용하기 위해 디자인되었으며, 여기에서는'fstream'으로 사용하려고합니다. C++ 스타일의'ifstream'을 사용하려면'infile >> number'를 사용해야합니다. – Borealid

+0

이 목적을 위해 작동하는 것으로 보이는 getline을 사용하고 있습니다. infile >> number는 전체 파일을 number number에 씁니다. – Mark

3

아니 직접적인 대답,하지만 난 그게 좋은 믿습니다 ...

사용 디버거! 세그멘테이션 오류가 발생하면 GDB는 정확한 행에서 일시 중지해야합니다. 따라서 오류가 무엇인지에 대한 좋은 힌트를 얻을 수 있습니다.

+0

이것은 도움이되었는데 문제가있는 곳에서 OP를 편집했습니다. – Mark