我最初在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定义的内存以供重用?谢谢!
答案 0 :(得分:0)
使用delete
运算符清理不再使用的内存,但是你还必须声明一些指针变量,因为你没有保留原始指针:
P2MainTask *pa = &a;
delete *pa;
P2Thread2Task *pb = &b;
delete *pb;
P2Thread3Task *pc = &c;
delete *pc;