2016-09-20 67 views
0
class Matrix { 

    double** contents; 
    uint r; 
    uint c; 

public: 

    Matrix(const i_list & list);   // constructor (using initializer list) 
    Matrix::Matrix(uint rows, uint cols){ 
    r = rows; 
    c = cols; 
    contents = new double * [r]; 
    for (int i = 0; i < r; ++i){ 
     contents[i] = new double[c]; 
     for (int j = 0; j < c; ++j){ 
      contents[i][j] = 0.0; 
     } 
    } 
}; 


Matrix::Matrix(const initializer_list<initializer_list<double> > & list){ 

    r = list.size(); 
    c = (*list.begin()).size(); 

    for (int i = 0; i < r; ++r){ 
     for (int j = 0; j < c; ++c){ 
      contents[i][j] = *((list.begin() + i)->begin() + j); // EXC_BAD_ACCESS error 
     } 
    } 
}; 

我要分配初始化列表到這樣一個動態分配的數組:表初始化器分配到2D陣列EXC_BAD_ACCESS錯誤

矩陣d = {{1,2},{3,4}}; 我得到一個EXC_BAD ACCESS錯誤,程序停止。有誰知道可能會導致這種情況?

+0

是的,還有更好的方法 - 'typedef std :: vector > Matrix;矩陣d = {{1,2},{3,4}};' – PaulMcKenzie

+0

在代碼中使用初始化列表有什麼缺點? – Char

+0

如果你想要做的是初始化(不分配,但初始化),沒有缺點。我的觀點是,你可以用C++的兩行代碼完成你所寫的所有代碼。 – PaulMcKenzie

回答

1

使用

Matrix d{{1, 2}, {3, 4}}; 

在你的初始化列表構造,ci環路內確定,因爲不同的列表可以有不同的尺寸。

編輯:

的問題是與運行時錯誤編輯之後,該構造函數沒有初始化contents所以它會崩潰。