构造函数问题 - 初始化列表(c ++)

时间:2011-09-14 01:48:34

标签: constructor segmentation-fault

这是一个奇怪的问题 我有一个非常简单的构造函数,它创建一个没有值的矩阵:

RegMatrix::RegMatrix(const int numRow, const int numCol):
    _numRow(numRow),_numCol(numCol),_matrix()
{

}

_matrix是一个包含'Comlex'的向量,这是我创建的对象

和VAL(i,j)是#define VAL(i,j) ((i * _numCol) + j)

现在,我在函数转置中调用此构造函数:

RegMatrix RegMatrix::transpose()
{
    RegMatrix newMatrix(_numCol,_numRow);
    cout << "DIMENSIONS " << newMatrix._numRow << " " << newMatrix._numCol << endl;
    for(int j=0; j<_numCol; j++)
    {
        for(int i=0; i<_numRow; i++)
        {
            newMatrix._matrix[VAL(i,j)] = _matrix[VAL(j,i)]; //<--SEGMENTATION FAULT
        }
    }
    return newMatrix;
}

这是我的问题:我第一次进入第二个循环时出现分段错误。当我使用eclipse调试器时,我看到newMatrix的_nunRow和_numCol值似乎是垃圾(一个是'0',另一个是-10000000或类似的东西)。更奇怪的是,我添加输出线只是为了确定它给了我正确的数字! 那么,关于什么可以成为我的问题的任何想法? 谢谢!

2 个答案:

答案 0 :(得分:0)

您正在索引一个空向量,这注定要失败。使用at代替下标运算符,您将获得异常。

答案 1 :(得分:0)

我的猜测(基于你所展示的)是你实现复制构造函数可能存在一些问题。