为什么我的代码会导致高 return 值? C++
Why is my code causing a high return value? C++
所以我创建了一个函数来执行矩阵乘法,该函数似乎可以执行我想要的操作。
但是,该程序似乎非常慢,并且在使用该函数时我得到了一个很高的 return 值 (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;
};
如果你这样做,你应该看到一些东西。
另外,可能另一个答案也有问题。如果你按照我的方式去做,你会发现什么。
所以我创建了一个函数来执行矩阵乘法,该函数似乎可以执行我想要的操作。
但是,该程序似乎非常慢,并且在使用该函数时我得到了一个很高的 return 值 (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;
};
如果你这样做,你应该看到一些东西。
另外,可能另一个答案也有问题。如果你按照我的方式去做,你会发现什么。