为什么我的代码导致高返回值? C ++

所以我做了一个可以做矩阵乘法的函数,而这个函数似乎可以完成我想做的事情。

但是,该程序似乎非常慢,使用该函数时,我得到了很高的返回值(3221225477)。

是什么原因导致此功能运行如此缓慢,我能做些什么来使其更快?

friend Matrix operator *(const Matrix &src,const Matrix &src2)  {  
    Matrix TEMP(src.matrixarr.size(),src2.matrixarr[1].size(),0);

    for (int i = 0; i < TEMP.matrixarr.size();i++){
        for (int j= 0; j < TEMP.matrixarr[1].size();i++){
            for( int k = 0; k < src.matrixarr[1].size();i++){
                TEMP.matrixarr[i][j] = src.matrixarr[i][k] + src2.matrixarr[k][j];
            };
        };
    }; 
    return TEMP;
};
zydalh 回答:为什么我的代码导致高返回值? C ++

您的代码中有3个i++,这似乎不正确。

应该是

friend Matrix operator *(const Matrix &src,const Matrix &src2)  {  
    Matrix TEMP(src.matrixarr.size(),src2.matrixarr[1].size(),0);

    for (int i = 0; i < TEMP.matrixarr.size();i++){
        for (int j= 0; j < TEMP.matrixarr[1].size();j++){
            for( int k = 0; k < src.matrixarr[1].size();k++){
                TEMP.matrixarr[i][j] = src.matrixarr[i][k] + src2.matrixarr[k][j];
            };
        };
    }; 
    return TEMP;
};

对于值3221225477(十六进制为0xC0000005),可能是因为值i太大而程序无法访问相应的内存。

,

我知道您的程序出了什么问题,但是学习如何调试程序很重要。在这种情况下,我将尝试打印出值,而不是仅使用调试器。

friend Matrix operator *(const Matrix &src,0);

    for (int i = 0; i < TEMP.matrixarr.size();i++){
        for (int j= 0; j < TEMP.matrixarr[1].size();i++){
            for( int k = 0; k < src.matrixarr[1].size();i++){
                std::cout << "i:" << i << "j:" << j << "k:" << k << "src.matrixarr[i][k]:" << src.matrixarr[i][k] << "src2.matrixarr[k][j]:" << src2.matrixarr[k][j] << "\n";
                TEMP.matrixarr[i][j] = src.matrixarr[i][k] + src2.matrixarr[k][j];
            };
        };
    }; 
    return TEMP;
};

如果执行此操作,您应该会看到一些异常。

另外,另一个答案也可能有问题。如果您以这种方式进行操作,您会发现什么。

本文链接:https://www.f2er.com/3104580.html

大家都在问