c++矩阵乘法向量out_of_range异常
C++ Matrix Multiplication Vector out_of_range Exception
我正在写一个c++程序,以二维向量的形式乘矩阵。矩阵具有预设的维度,并包含随机生成的双值。由于某些我无法弄清楚的原因,当我运行程序时抛出了一个out_of_range异常:
在MatMulSeq.exe中0x7620dae8抛出异常:Microsoft c++ Exception: std::out_of_range at memory location 0x00b3eb20.
抛出异常:'System.Runtime.InteropServices. 'MatMulSeq.exe中的SEHException
类型为"System.Runtime.InteropServices"的未处理异常。MatMulSeq.exe中出现SEHException
附加信息:外部组件抛出异常。
我尝试使用断点来确定异常被抛出的位置,似乎是当vec_b
被填充时,但这可能是错误的。
我基本上是从我在网上找到的被证实有效的其他程序中复制了这个程序的方法,所以我不确定为什么我的程序失败了。
下面是我的代码:#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
double randNum()
{
double min = 1.0;
double max = 1000000.0;
return ((1000000.0 - 1.0) * ((double)rand() / (double)RAND_MAX) + min);
}
int main()
{
// Seed srand
unsigned seed = time(0);
srand(seed);
// Matrix setup
// # columns of 1st matrix must = # rows of 2nd matrix
// Result will have same # rows as 1st and same # columns as 2nd
int RowA = 50,
ColA = 20,
RowB = 20,
ColB = 25,
RowC = RowA,
ColC = ColB;
cout.precision(2);
vector<vector<double>> vec_a;
vec_a.resize(RowA);
for (int i = 0; i < RowA; ++i)
vec_a[i].resize(ColA);
vector<vector<double>> vec_b;
vec_b.resize(RowB);
for (int i = 0; i < RowB; ++i)
vec_a[i].resize(ColB);
vector<vector<double>> vec_c;
vec_c.resize(RowC);
for (int i = 0; i < RowC; ++i)
vec_c[i].resize(ColC);
// Fill matrices a and b
for (int i = 0; i < RowA; i++)
{
for (int j = 0; j < ColA; j++)
{
vec_a.at(i).at(j) = randNum();
}
}
for (int i = 0; i < RowB; i++)
{
for (int j = 0; j < ColB; j++)
{
vec_b.at(i).at(j) = randNum();
}
}
// Fill matrix c by multiplying matrices a and b
for (int i = 0; i < RowA; i++)
{
for (int j = 0; j < ColB; j++)
{
vec_c.at(i).at(j) = 0;
for (int k = 0; k < RowB; k++)
{
vec_c.at(i).at(j) = vec_c.at(i).at(j) + (vec_a.at(i).at(k) * vec_b.at(k).at(j));
}
}
}
// Display
for (int i = 0; i < RowA; i++)
{
for (int j = 0; j < ColA; j++)
{
cout << fixed << vec_a.at(i).at(j) << endl;
}
}
cout << endl << endl << endl;
for (int i = 0; i < RowB; i++)
{
for (int j = 0; j < ColB; j++)
{
cout << fixed << vec_b.at(i).at(j) << endl;
}
}
cout << endl << endl << endl;
for (int i = 0; i < RowC; i++)
{
for (int j = 0; j < ColC; j++)
{
cout << fixed << vec_c.at(i).at(j) << endl;
}
}
system("pause");
return 0;
}
我很抱歉,如果我在这里问得太多,但我已经被困在这个几个小时,我真的可以使用一些指导。由于 In
vector<vector<double>> vec_b;
vec_b.resize(RowB);
for (int i = 0; i < RowB; ++i)
vec_a[i].resize(ColB);
您正在调整vec_a的行大小,而不是vec_b,因此vec_b中的行都是空的。
相关文章:
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 如何解决'vector subscript out of range'错误?
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- QList::operator[]中的断言失败<T>:QJoysticks 中的"index out of range"
- 尝试获取矩阵的正确对角线会导致"vector out of range"错误
- 如何使用 mpi 分散修复"vector subscript out of range"?
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
- "Vector subscript out of range",在返回声明?
- QList<T>::operator[]: "index out of range" 中的断言失败
- 使用 top() 时收到错误"cannot dereference out of range deque iterator"
- pop_back() 导致"Vector subscript out of range"
- 数组未加载 - "index out of range in objectAtIndex()"
- 使用矢量"String subscript out of range"错误
- 我收到"vector subscript out of range"错误
- 我正在"string subscript out of range error".我不知道为什么
- 这里有一个错误:"string subscript is out of range"
- 每次调试此代码时,我都会得到"subscript out of range error"。有人可以帮我查明一个或多个错误吗?
- 为什么输入时出现错误? "expression: string subscript out of range"
- 为什么我的程序有一个实例,其中"Vector Subscript out of Range"?