这个过程似乎陷入僵局

时间:2012-07-28 09:05:36

标签: c++ deadlock

void Simulator::writeData()
{ 
  resultFile_<<"#"<<*gTime_<<"\n"; 
  Wire* wire=wires_->next;
  char* c=0;
  while(wire!=0)
  {
      if(wire->getType() ==TYPE_OUT)
      {
          c=wire->getValue();
              resultFile_<<"b"<<c<<" "<<wire->getName()<<"\n";  //output result

          //// for vector of results://///
          Tlogic tempEntery(wire->getSize());
          tempEntery.setTime(*gTime_);
          tempEntery.setLogic(c);
          goldenResult_.push_back(tempEntery);
          ////////////////////////////////

      }
   wire=wire->next; 
  } 
} //end of function writeData

在本代码中,我需要一个临时聊天*变量,我将其命名为c, 我为它分配一个内存然后删除, 题: 我的程序正确调用此函数,它的工作原理, 但我称之为第十次,程序中断,当我暂停时,会出现此错误: 这个过程似乎陷入僵局。

这是错误: 该过程似乎已死锁(或未运行任何用户模式代码)。所有线程都已停止。 +一个OK按钮!

.................. 我认为这是因为我的矢量(goldenResult_)!!因为当我评论那条线时没有死锁 我该如何解决这个错误?

2 个答案:

答案 0 :(得分:0)

您正在根据无法从显示的代码中确定的外部条件分配/释放内存。我的建议是纠正分配习惯用法:将指针初始化为0,并在删除后设置为0:

  char* c = 0; // be sure you don't free if not allocated
  while(wire!=0)
  {
      if(wire->getType() ==TYPE_OUT)
      {
          c=new char[wire->getSize()+1] ;
          wire->getValue(c);
              resultFile_<<"b"<<c<<" "<<wire->getName()<<"\n";  //output result

          //// for vector of results://///
          Tlogic tempEntery(wire->getSize());
          tempEntery.setTime(*gTime_);
          tempEntery.setLogic(c);
          goldenResult_.push_back(tempEntery);
          ////////////////////////////////
         // delete c;
      }
      delete c ; // this can remain unchanged: delete of NULL is harmless
      c = 0;  // this way you avoid to delete more times than allocated
      wire=wire->next; 
  } 

另一种选择是使用智能指针,它会跟踪你的分配。

答案 1 :(得分:0)

我的猜测是:

   tempEntery.setTime(*gTime_); <--- (hm... gTime ... race somewhere ?? )
   tempEntery.setLogic(c);
   goldenResult_.push_back(tempEntery);

你能展示处理你的载体的部分吗?

很抱歉,不在评论中,没有足够的分数。