如何在C ++中重用相同的std :: vector变量?

时间:2015-04-21 04:13:49

标签: c++ multithreading memory-management vector memory-leaks

我有一堆整数向量和整数向量数组,必须在每次迭代中清除和更新。

我遇到内存泄漏错误,例如" munmap_chunk()无效指针" " free():下一个大小无效(快):" "双重免费或腐败"就像我一样 我无法有效地清理/管理记忆。

程序:

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;
        }
    }

我在这里缺少什么?为什么这个程序结构中存在内存泄漏? 感谢您的帮助。谢谢

0 个答案:

没有答案