2016-09-20 71 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所以它会崩溃。