c++ - c++向量下标超出范围omp锁
问题描述
如果任何线程在该行中添加新值,我想在完整的锁上使用锁。为此,我编写了以下代码:
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]);
}
当我运行代码时,它给了我错误:
向量下标超出范围
现在我不明白我错在哪里。
解决方案
您的向量ds_lock
中没有任何元素,并且您正在访问Sparse_Matrix_RL
以下语句的构造函数中第一个元素的地址。
omp_init_lock(&ds_lock[0]);
您必须使用其中一个resize()
或push_back()
添加元素,然后才尝试访问其元素。
推荐阅读
- xml - 如何在 'XREF' 元素中包装 'styled-content' 值
- c - 确定 N 是否为素数(如果 N 为 [2 <= N <= 2^63-1])的最佳算法是什么?
- google-chrome - 谷歌分析目标没有跟踪所有订单
- javascript - 我需要帮助在 Discord.JS 中创建警告命令
- java - 为什么我们需要在Hashtable/ConcurrentHashMap的put方法中加锁?
- jenkins - Jenkins 插件使用来自另一个插件的类,而不是 Maven 依赖项
- r - 在R中的循环内过滤多列数据框
- python - Google Fit 位置数据源
- r - 在 R 表达式中出现意外的输入错误
- iframe - 如何过滤 iframe 中的文件夹标题显示