调试断言失败:表达式向量下标超出范围
Debug Assertion Failed: Expression vector subscript out of range
我不明白为什么当我在向量中保留了space时它说下标超出范围。我创建了一个简短的代码形式来更好地解释问题所在:
#include <vector>
#include <string>
#include <thread>
#include <iostream>
using namespace std;
class A {
public:
vector<vector<string>> foo;
thread* aThread;
A() {
foo.reserve(10); //makes sure we have space...
aThread = new thread([this]() {
for (int i = 0; i < 10; i++) {
foo[i].push_back("Hello"); // Debug assertion failed. :(
}
});
}
};
int main()
{
A a;
a.aThread->join();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < a.foo.size(); j++) {
cout << a.foo[i][j] << " ";
}
cout << endl;
}
return 0;
}
在这里,当我尝试将元素添加到线程内的 foo 向量中时,它会立即给出错误。我不知道出了什么问题。请帮忙。
foo.reserve(10)
为 foo 中的元素保留 space,但不会用空 std::vector.
填充任何元素
您可以将其更改为:
foo.resize(10);
这将保留 space 并创建空 vector 元素,以便您可以访问它们。
我不明白为什么当我在向量中保留了space时它说下标超出范围。我创建了一个简短的代码形式来更好地解释问题所在:
#include <vector>
#include <string>
#include <thread>
#include <iostream>
using namespace std;
class A {
public:
vector<vector<string>> foo;
thread* aThread;
A() {
foo.reserve(10); //makes sure we have space...
aThread = new thread([this]() {
for (int i = 0; i < 10; i++) {
foo[i].push_back("Hello"); // Debug assertion failed. :(
}
});
}
};
int main()
{
A a;
a.aThread->join();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < a.foo.size(); j++) {
cout << a.foo[i][j] << " ";
}
cout << endl;
}
return 0;
}
在这里,当我尝试将元素添加到线程内的 foo 向量中时,它会立即给出错误。我不知道出了什么问题。请帮忙。
foo.reserve(10)
为 foo 中的元素保留 space,但不会用空 std::vector.
填充任何元素您可以将其更改为:
foo.resize(10);
这将保留 space 并创建空 vector