2013-10-21 74 views
2

我想創建一個使用向量的二維數組。我寫了下面的代碼:給出分段錯誤的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內的不存在的載體中。

在這種情況下,你也知道的大小,你應該初始化您在構造函數中想要的元素數量的向量:初始化裏面坐了11個空載體矢量V

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

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);