2013-10-21 1 views
2

벡터를 사용하여 2D 배열을 생성하려고합니다. 나는 다음과 같은 코드를 작성했습니다 : 2D 벡터가 세그멘테이션 결함을 제공합니다.

int main() { 
    vector< vector<int> > v; 

    int i, j; 
    for(i=0; i<11; i++) 
     for(j=0; j<11; j++) 
      v[i].push_back(j); 
    for(i=0; i<11; i++) { 
     for(j=0; j<11; j++) 
      cout<<v[i][j]<<" "; 
     cout<<endl; 
    } 
    return 0; 
} 

지금 나는, 0 10 십일 회 (새로운 라인의 각 시간) 번호를 인쇄 할 것으로 예상했다. 그러나이 코드는 런타임 오류 (분할 오류)를 제공합니다. 아무도 내가 잘못 가고있는 곳을 말해 줄 수 있습니까?

감사합니다.

답변

6

벡터를 선언 할 때 아직 요소가 없습니다. 따라서

:

v[i].push_back(j) 

위치 I에서 벡터 V 안에 존재 J 벡터 내로 삽입하는 것을 시도한다.

vector<vector<int> > v(11); 

그 안에 11 빈 벡터와 벡터 v를 초기화 :이 경우

당신은 당신이 생성자에서 원하는 요소의 개수와 벡터를 초기화해야 크기를 알 수있다.

0

v[i] 아직 존재하지 않으면 벡터 벡터가 비어 있습니다.

vector< vector<int> > v(11);으로 변경하면 11 개의 벡터가있는 초기 벡터가됩니다.

1

사용할 수없는 메모리에 액세스하려고하면 조각화 오류가 발생합니다. 일반적으로 벡터를 사용할 때 이는 벡터 외부에있는 요소 (너무 높거나 너무 낮음)에 액세스하고 있음을 의미합니다.

vector을 사용하면 for loops에 항상 size() 기능을 사용하여 초과 실행을 방지합니다. 0...10으로 이동하면 벡터 크기 밖의 요소에 액세스 할 가능성이 매우 높습니다 (11 개 요소가 반환되며 초기화되지 않습니다).

1

첫 번째 레벨의 벡터를 초기화하지 않습니다.

for(i=0; i<11; i++) 
    vector<int> subVector; 
    v.push_back(subVector); 
    for(j=0; j<11; j++) 
     v[i].push_back(j); 
관련 문제