2011-09-14 18 views
0

が、それは私が を持っている奇妙な問題だ、私はだ非常に単純なコンストラクタを持っていない値を持つ行列を作成します、オブジェクト私は問題初期化リストは(C++)

を作成したと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の値がガベージ(1つは '0'、もう1つは-10000000など)であるようです。もっと奇妙なのは、確かに出力ラインを追加して、それが私に正しい数字を与えたということです! だから、私の問題になる可能性のあるものは何ですか? ありがとう!

+0

ベクターを正しいサイズに設定してもよろしいですか? –

+0

'VAL(i、j)'は何を返しますか?その定義を表示します。初期化子リストでは、 '_matrix'に何も初期化していません。 – Mahesh

+0

ベクトルはサイズ0に初期化されています。 – yotamoo

答えて

0

あなたは空のベクトルにインデックスを作成していますが、これは失敗することになります。添字演算子の代わりにatを使用すると、例外が発生します。

+0

おそらく、numRow * numColで行列を初期化する必要があります。 –

0

私が推測するところによると、コピーコンストラクタの実装方法にはいくつか問題があるかもしれません。

関連する問題