为什么我的代码会导致高返回值?C++
Why is my code causing a high return value? 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;
};
您的代码中有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, 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++){
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;
};
如果你这样做,你应该送别一些东西。
另外,另一个答案可能也有问题。如果你按照我的方式这样做,你会发现什么。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- C++输出参数与返回值