2011-01-12 5 views
0

c를 정수를 반복하여 for 루프에서 EOF를 사용하는 방법 :이 나에게 세그먼트 오류 제공 ++

for (int i=0; !file.eof();i++) 
{ 
    getline(file,line); 
    roughInput.lines[i].split(line); 
} 

을이 하나가 내가 증가 할 전망에 대한 나의 이해에서하지

for (int i=0; i<2;i++) 
{ 
    getline(file,line); 
    roughInput.lines[i].split(line); 
} 

않습니다 파일 끝까지, 맞지? i-net에서 많은 예제를 찾을 수 없기 때문에 더 나은 솔루션이 있습니까?

+0

이것은 어둠 속에서 찌르는 것이지만, 아마도 segfault는'roughInput.lines'을 overindex하여 발생합니다. 디버거를 사용하여 segfault가 발생할 정확한시기를 찾으십시오. – suszterpatt

+0

@suszterpatt 그렇습니다. 문제가 발생합니다. 벡터 라인의 오브젝트 수가 1 씩 증가하기 때문에 [] –

답변

2

루프가 너무 많이 실행되고 있습니다. file.eof()은 파일의 끝에있는 동안 읽기를 시도 할 때까지 false를 반환하지 않습니다. 당신은 아마 getline 전화와 split 사이에 수표를 넣을 :

getline(file, line); 
    if (!file.eof()) 
     roughInput.lines[i].split(line); 

하고 그에 따라 루프 논리를 수정.

그러나 더 좋은 해결책은 roughInput.lines을 동적으로 성장시켜 파일이 예상보다 길면 seg 오류가 발생하지 않게하는 것입니다.

+0

은 동적으로 커질 수 없습니다. split()은 라인의 일부를 클래스와 비교합니다. if (! eof) works, thank you –

+0

나는 for (int i = 0; file; i ++)가 작동 할 것이라고 믿는다. (eof 이외의 스트림 오류가있는 경우 작동한다.) –