如何释放任务和记忆a = * new(task :: allocate_root())P2MainTask(& Improve)?

时间:2010-10-20 19:12:53

标签: c++

我最初在Windows上构建了TBB代码并且运行正常。今天我将代码移到Linux系统(OpenSUSE 64位)。

当我尝试运行它时,程序总是在一些迭代后停止。我想知道是否因为系统内存耗尽。代码部分放在下面。

SolverP2 Improve(&inst,&mysolution,StartSolT1,&P1Queue,&P2Queue,&P3Queue,iterControl,exchangeControl,&stopControl );
        task_list tl;  
    P2MainTask& a=*new(task::allocate_root()) P2MainTask(&Improve);
     tl.push_back(a);
        SolverP2T2 Thread2(&inst,&mysolution,StartSolT2,&P1Queue,&P2Queue,iterControl,exchangeControl,&stopControl );
    P2Thread2Task& b=*new(task::allocate_root()) P2Thread2Task(&Thread2);
       tl.push_back(b);
    SolverP2T3 Thread3(&inst,&mysolution,StartSolT3,&P1Queue,&P3Queue,iterControl,exchangeControl,&stopControl );
    P2Thread3Task& c=*new(task::allocate_root()) P2Thread3Task(&Thread3);
      tl.push_back(c);
       Shaking shakeSol(&inst,&mysolution,StartSolT4,&P4Queue,&stopControl );
       ShakingTask& d=*new(task::allocate_root()) ShakingTask(&shakeSol);
       tl.push_back(d);
        cout<<"task deine finished"<<endl;       
       task::spawn_root_and_wait(tl);
         cout<<"task start finished"<<endl;  

有谁能告诉我如何解决这个问题?我们如何释放new定义的内存以供重用?谢谢!

1 个答案:

答案 0 :(得分:0)

使用delete运算符清理不再使用的内存,但是你还必须声明一些指针变量,因为你没有保留原始指针:

P2MainTask *pa = &a;
delete *pa;
P2Thread2Task *pb = &b;
delete *pb;
P2Thread3Task *pc = &c;
delete *pc;