2014-08-27 1 views
-1

문자열 목록에 대한 반복자 벡터의 값에 액세스하는 동안 오류가 발생했습니다. 이것은 복잡한 코드의 일부이므로 여기에 관련 부분 만 표시하려고합니다. 광산과 비슷한 문제를 찾았지만 문제가 무엇인지 파악할 수 없었습니다.반복자의 벡터를 문자열 목록에 평가하는 동안 분할 오류가 발생했습니다.

이들은 내 변수의 선언입니다.

/// Vector of lists of files 
std::vector <std::list <std::string> > filelist; 

/// Vector with iterator for the list of files 
std::vector <std::list <std::string>::iterator > iterator; 

이 반복자 벡터를 초기화하는 방법이다 (이는 I = 0의 I = 1 다른 파일 디렉토리와 2 번 호출 포함하는 함수)

iterator.push_back(filelist.at(i).begin()); 

이것은 어디 나는 반복자가 가리키는 문자열 값에 액세스하려고하고 독방 감금 오류가 발생합니다

std::string path=*(iterator.at(i)); 

반복자가 가리키는 내용에 액세스하는 또 다른 방법이 있나요? 문자열이 비어 있으면 문제가 있습니까?

희망을 보내 주시면 감사하겠습니다.

+3

문제를 재현하는 최소한의 (컴파일 가능한) 코드를 보여주십시오. – deepmax

+0

버그는 거의 확실하다고 생각되는 코드의 어딘가에 있습니다. 최소한의 완전한 예제를 분리하기가 어렵다면 코드가 과도하게 결합되어 있다는 강력한 증거입니다. – Beta

+0

첫 번째 의심은 당신이 저장 한 반복자가 무효화되었다는 것입니다. 이것은 목록에서 참조하는 특정 요소를 삭제하거나 어떤 식 으로든'filelist'를 수정하면 발생할 수 있습니다. – molbdnilo

답변

0

일부 목록이 비어 있고 begin()에 대한 참조 연산자를 적용하면 세그먼트 오류가 발생하는 것으로 보입니다.

+0

나는 filelist.push_back()을하고 있었다. 서로 다른 두 순간에 iterator.push_back (filelist.at (i) .begin())을 호출 할 것입니다. 두 번째로 목록에서 push_back을 수행하면 모든 내용이 재 할당되어 이전 메모리 지점을 가리키는 첫 번째 반복자 포인터가 남습니다. – Sapiens

+0

@Edien 일반적으로 push_back은 함수 예약이 사용되지 않은 경우 메모리를 재 할당합니다. –

관련 문제