Проблема с конструктором - список инициализации (c ++) - PullRequest
0 голосов
/ 14 сентября 2011

это странная проблема, которая у меня есть У меня есть очень простой конструктор, который создает матрицу без значений:

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)

Теперь я вызываю этот конструктор в функции transpose:

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, я вижу, что значения _nunRow и _numCol для newMatrix кажутся мусором (одно - «0», другое - -10000000 или что-то в этом роде). Еще более странным является то, что я добавил строку вывода просто для уверенности, и она дала мне правильные числа! Итак, есть идеи относительно того, в чем может быть моя проблема? Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Я предполагаю (основываясь на том, что вы показываете), что могут быть некоторые проблемы с реализацией конструктора копирования.

0 голосов
/ 14 сентября 2011

Вы индексируете пустой вектор, который обречен на провал. Используйте at вместо оператора индекса, и вы получите исключение.

...