使用一维数组进行矩阵乘法

9
我正在尝试将存储在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
如果矩阵的行数为rA,则条件必须为i < rA。在其他地方也是类似的。 - Mahesh
1
  1. 使用调试器找出程序在哪里崩溃。
  2. 使用向量并调用“at”函数,如果越界将会抛出一个异常。
- chris
1
对我来说,似乎是这样的……但你的程序崩溃表明这种说法是相当不正确的。如果你从代码有误、你是错误的制造者这一假设开始,你会更快地找到解决方案。 - duffymo
rB难道不总是等于cA,而rC没有被使用吗?一般来说,我认为你只需要三个尺寸(ra=rCrb=cAcb=cC,如果我没记错的话),而不是六个;考虑消除未使用的参数以减少混淆。 - Sergey Kalinichenko
1
@duffymo - 是的,我认为那是不正确的。也许是我的英语有问题,但我的意思是:“我想不出到底哪里出了问题”。:-)另外,sum显然应该是一个浮点数 :-P - Tom Teman
2个回答

12

你的 for 循环中很可能是要用 < 而不是 <=


7

尝试在您的for循环中使用i < rAj < cBk < rB


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接