小编ryg*_*guy的帖子

Valgrind或Electric Fence未检测到堆腐败.我应该怀疑吗?(C++)

我最近遇到了堆腐败的第一次战斗 (已解决).在我家的linux机器上,使用valgrind和电栅栏(使用gdb),罪魁祸首代码无错误地退出.然而,在我们实验室的Windows机器上,我始终从我引用的帖子中描述了VS中与堆损坏相关的错误消息.

valgrind和电围栏不会发现这样的问题,这是否令人惊讶(或至少不常见)?其他人提到了一个可能类似的错误,在这里回答了valgrind .这些工具无法检测到此问题的原因可能是什么?有没有理由怀疑错误实际上是堆腐败?

更新:正如在描述原始问题的帖子中所提到的,我发现问题是由于指向std :: vector中的元素指针,这变得很糟糕.用std :: list替换向量(添加新元素时指针不会变为无效)修复了问题.所以回到我关于为什么valgrind没有发现问题的问题,我问是否有关于如何避免将来出现类似情况的建议,即valgrind未检测到的内存问题,这是我的一个问题最喜欢的工具 显然,更好地了解STL如何工作将是一个好主意.也许我需要在编程等方面对断言更加自信.

valgrind memory-corruption visual-studio electric-fence

6
推荐指数
1
解决办法
2081
查看次数

OpenMP循环中的数据成员

我有以下课程:

Class L{
    public:
    bool foo(vector<bool> & data);
    private:
    C** cArray;
}
Run Code Online (Sandbox Code Playgroud)

并且想要在创建L的对象并初始化cArray中的所有元素之后,在函数foo中并行化for循环,该函数被称为somtime.

bool L::foo(vector<int> & data){
int row, col;
#pragma omp parallel shared(SIZE, cArray, data) private(row, col)
    for (row=0, row<SIZE; ++row)
    {
        for (col=0; col<SIZE; ++col)
        {
            cArray[row][col].computeScore(data);
        }
    }
}    
Run Code Online (Sandbox Code Playgroud)

但这会产生错误:错误C3028:'L :: cArray':只能在数据共享子句中使用变量或静态数据成员.

假设我不想让cArray静态,有什么可以做的吗?

for-loop openmp

5
推荐指数
1
解决办法
2697
查看次数