vector.insert()导致内存损坏

时间:2012-05-09 21:11:54

标签: c++ vector memory-corruption

我对C ++不是很熟悉,所以我可能会遗漏一些明显的东西。 我知道vector.insert的“无效迭代器”问题,但我不知道在这种情况下会发生什么。 还涉及一些OpenMP,但插入本身位于并行块之外。

void doWork(vector<Solution> &sol)
{
    vector<Solution> partial[40];

    #pragma omp parallel for ... shared(partial) ...
    for (...) {
        ...
        partial[tid].push_back(Solution(i,j));
        ...
    }

    for (i = 0; i < 40; i++)
        sol.insert(sol.end(), partial[i].begin(), partial[i].end());
}

编辑: 错误消息是std bad alloc。 我相信不超过40个主题。显然,即使使用1个线程,也会发生(打开和关闭)。 更有趣的是另一种解决方案:

for(i = 0; i < 40; i++)
    for(j = 0; j < partial[i].size(); j++)
        sol.push_back(partial[i][j]);

似乎在可变数量的线程上一直有效。

0 个答案:

没有答案