gpt4 book ai didi

C++ vector 下标超出范围 omp 锁

转载 作者:行者123 更新时间:2023-11-30 04:53:35 38 4
gpt4 key购买 nike

如果有任何线程在该行中添加新值,我想在完整锁上使用锁。为此,我编写了以下代码:

std::vector <omp_lock_t> ds_lock;

我正在构造函数中初始化锁

Sparse_Matrix_RL::Sparse_Matrix_RL(unsigned int row_size, unsigned int col_size)
{
row_sz = row_size;
col_sz = col_size;
omp_init_lock(&ds_lock[0]);
}

我在这里使用它

void Sparse_Matrix_RL::addValue(unsigned int rid, unsigned int cid, double value)
{
omp_set_lock(&ds_lock[rid]);

if (value == 0)
{
omp_unset_lock(&ds_lock[rid]);
return;
}
std::map<unsigned int, double>::iterator str = data_Matrix[rid].begin();
std::map<unsigned int, double>::iterator end = data_Matrix[rid].end();
str = data_Matrix[rid].find(cid);
//while (str->first != cid && str != end) str++;
if (str != end)
str->second += value;
else
data_Matrix[rid][cid] = value;
omp_unset_lock(&ds_lock[rid]);
}

当我运行代码时出现错误:

vector subscript out of range

现在我不明白我哪里错了。

最佳答案

您的 vector ds_lock 中没有任何元素,您正在访问以下语句中 Sparse_Matrix_RL 的构造函数中第一个元素的地址。

omp_init_lock(&ds_lock[0]);

您必须使用 resize()push_back()添加元素,然后才尝试访问其元素。

关于C++ vector 下标超出范围 omp 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53867949/

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