C ++简单的多线程程序内存泄漏

时间:2015-06-01 13:32:27

标签: c++ multithreading memory-leaks

我写了一个简单的代码,它应该创建1000个线程,做一些工作,加入它们,然后重放1000次。

我有这段代码的内存泄漏,我不明白为什么。我一直在寻找解决方案,无处不在。

#include <iostream>
#include <thread>
#include <string>
#include <windows.h>


#define NUM_THREADS 1000

std::thread t[NUM_THREADS];

using namespace std;


//This function will be called from a threads
void checkString(string str)
{
    //some stuff to do
}

void START_THREADS(string text)
 {

    //Launch a group of threads
    for (int i = 0; i < NUM_THREADS; i++)
    {
        t[i] = std::thread(checkString, text);
    }


    //Join the threads with the main thread
    for (int i = 0; i < NUM_THREADS; i++) {

        if (t[i].joinable())
        {
            t[i].join();
        }

    }

    system("cls");
 }


int main() 
{

    for(int i = 0; i < 1000; i++)
    {
        system("cls");
        cout << i << "/1000" << endl;
        START_THREADS("anything");
    }


    cout << "Launched from the main\n";

    return 0;
}

1 个答案:

答案 0 :(得分:3)

我不确定内存泄漏,但你肯定有内存错误。你不应该这样做:

delete &t[i];

t[i]未与new分配,且不能delete d。您可以安全地删除该行。

至于内存消耗,你需要问问自己是否真的需要产生100万个线程。产生线程并不便宜,并且您的平台不太可能同时运行多个线程。