C++ 如何在C+;中重用相同的std::vector变量+;?
我有一堆整数向量和整数向量数组,它们必须在每次迭代中被清除和更新 我遇到了内存泄漏错误,如“munmap\u chunk()无效指针”“free():下一个大小无效(fast):“双重释放或损坏”等 我无法有效地清除/管理内存 节目:C++ 如何在C+;中重用相同的std::vector变量+;?,c++,multithreading,memory-management,vector,memory-leaks,C++,Multithreading,Memory Management,Vector,Memory Leaks,我有一堆整数向量和整数向量数组,它们必须在每次迭代中被清除和更新 我遇到了内存泄漏错误,如“munmap\u chunk()无效指针”“free():下一个大小无效(fast):“双重释放或损坏”等 我无法有效地清除/管理内存 节目: vector<vector<int>> work_queue; vector<int> global_graph[NUM_OF_NODES]; vector<int> global_L0; vector<int
vector<vector<int>> work_queue;
vector<int> global_graph[NUM_OF_NODES];
vector<int> global_L0;
vector<int> global_L1;
vector<int> global_L2;
main thread
-----------
while(!exit) {
// update output using results stored in global vector
//clear workqueue
for (int m = 0; m < NUM_OF_WORKERS; m++) {
work_queue[m].clear();
}
// update workqueue using updated results
for (int m = 0; m < NUM_OF_WORKERS; m++) {
work_queue.push_back(row);
}
for (int i = 0; i < source_vertices.size(); i++) {
work_queue[i % NUM_OF_WORKERS].push_back(source_vertices[i]);
}
// clear global vectors - free memory
global_L0.clear();
global_L1.clear();
global_L2.clear();
//call worker threads
}
All worker threads execute the below function
--------------------------------------------
void * worker() {
vector<int> local_graph[NUM_OF_NODES];
vector<int> local_L0;
vector<int> local_L1;
vector<int> local_L2
while (1) {
// clear all local vectors; free memory
local_L0.clear();
local_L1.clear();
local_L2.clear();
while (!work_queue[workerId].empty) {
// do the calculations based on global data and update local vectors
// threads synchronize and update global vectors
// based on local computations on local vectors
// when done loop through
}
//check_thread for exit condition() and break if required;
}
}
向量工作队列;
向量全局_图[NUM_OF_NODES];
向量全局_L0;
向量全局_L1;
向量全局_L2;
主线
-----------
当(!退出){
//使用存储在全局向量中的结果更新输出
//清除工作队列
对于(int m=0;m
我错过了什么?为什么这个程序结构中有内存泄漏?
谢谢你的帮助。谢谢,向量不是线程安全的。是的!我在每个线程中都有局部向量,我有同步点,线程在这里更新全局向量。对于少量节点,我的程序结果是正确的,但当我增加节点大小时,随着迭代次数的增加和数据结构的增大,我的程序会出现内存泄漏。正如所说的,STL向量不是线程安全的。对这些全局向量(包括向量的工作队列向量)的访问必须受到互斥的保护[不确定同步点是否就是这个意思]。访问是指在所有工作线程和主线程中都有读或写访问权限的所有位置。如果你想得到任何有意义的答案,你应该在你的问题中添加实际的锁定/同步代码。好吧,从一般的角度来看,STL结构有一定程度的复杂性,如果两个线程试图同时更新它们,内部可能会失步,导致内存未正确处理或指针指向错误位置。。。所以,是的,同步错误会导致内存泄漏、内核转储、计算机爆炸或发展出自己的个性。很可能是您没有向我们展示的代码造成了问题。你应该充实你的榜样。将代码缩减为一个较小的示例也可能有助于发现问题,只要这样做,您就可以知道何时删除了导致问题的部分,或者行为何时发生了变化。