2012-04-20 19 views
4

1d配列内に格納された2つの行列を掛けようとしています。1d配列を使用した行列乗算

私はこの機能を使用していますが、プログラムがクラッシュします。範囲外のエラーが原因で発生します。 しかし、誰もが私が何をしたかを知ることができ、私はデバッグへの(簡単な)能力を持っていないので、私は私のコードが正しいかどうかを決定する必要があり、私に...それがあるので、

void SampleUtils::multiplyMatrices(float* matA, int rA, int cA, float* matB, 
     int rB, int cB, float* matC, int rC, int cC) { 
    for (int i = 0; i <= rA; i++) { 
     for (int j = 0; j <= cB; j++) { 
      float sum = 0.0; 
      for (int k = 0; k <= rB; k++) 
       sum = sum + matA[i * cA + k] * matB[k * cB + j]; 
      matC[i * cC + j] = sum; 
     } 

    } 

ようです違う?

おかげで...

+1

i < rAj < cBk < rBを使用してみてください。他の場所でも同様です。 – Mahesh

+1

1.デバッガを使用して、クラッシュする場所を特定します。 2.ベクトルを使用し、out-of-boundsエラーの場合は例外をスローするために 'at'を呼び出します。 – chris

+1

"...私にはそれは...." - プログラムがクラッシュするという事実は、このステートメントが間違っていることを示しています。あなたのコードが間違っているという前提から始めれば、より速くソリューションを見つけることができます。 – duffymo

答えて

8

チャンスはあなたがあなたのforループ内<の代わり<=を意味しています。

+0

あなたは絶対に正しいです。私の最後の愚かな間違い。 –

6

は、その後、条件が**必須**私はrA`を< ``ことrA`は、行列の行数であれば、あなたのfor