gpt4 book ai didi

c++ - vector 不可取消引用

转载 作者:行者123 更新时间:2023-11-30 03:43:02 26 4
gpt4 key购买 nike

在查看了评论后,我查看了代码并发现了一个错误。

似乎经过一些修补我遇到了这个错误:

Debug error: vector iterator is not dereferencable.

我 100% 确定它在 assingthreads 内部的 vector 中。

这是产生错误的新添加代码:

    void historical::writeData(std::vector<std::vector<std::wstring>> in, const string& symbol) {
std::cout << "Sending data to database connector" << std::endl;
std::vector<std::vector<std::wstring>> temp;

while (!in.empty()) {
for (int i = 0; i < 5; i++) {
temp.push_back(in.back());
in.pop_back();
}
assignthreads(temp, symbol);
temp.clear();
}

}
void historical::assignthreads(std::vector<std::vector<std::wstring>> partVec, const string& symbol) {
int i = 0;
std::thread threads[5];
std::vector<std::vector<std::wstring>>::iterator it;
for (it = partVec.end();
it != partVec.begin();
it--) {
std::shared_ptr<database_con> sh_ptr(new database_con);
threads[i] = std::thread(&database_con::start, sh_ptr, *it, symbol);
partVec.pop_back();
i++;
}
for (auto& th : threads) th.join();

}

最佳答案

您第一次通过 for -循环,it = partVec.end() .

根据定义,您不能取消引用 endvector但是你打电话:

threads[i] = std::thread(&database_con::start, sh_ptr, *it, symbol);

for你想要的循环可能使用了反向迭代器, rbegin rend 像这样:

for(auto it = rbegin(partVec); it != rend(partVec); ++it)

一些补充说明:

  1. 传递您的 vector通过引用:void assignthreads(std::vector<std::vector<std::wstring>>& partVec, const string& symbol)
  2. 您需要验证 threadspartVec 大小相同.所以要么做:vector<thread> threads(size(partVec))或在 threads 之后定义为:assert(size(threads) == size(partVec))

关于c++ - vector 不可取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36400389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com