0
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

在这段代码中,我需要一个临时 chat* 变量,我将它命名为 c,我为其分配了一个内存然后删除,问题:我的程序正确调用了这个函数并且它可以工作,但是我第十次调用它,程序中断当我暂停它时,会出现此错误:进程似乎已陷入僵局。

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

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

4

2 回答 2

0

我的猜测是:

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

你能展示处理你的向量的部分吗?

对不起,不在评论中,没有足够的积分。

于 2012-07-28T12:51:52.160 回答
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; 
  } 

另一种方法是使用智能指针,为您跟踪分配。

于 2012-07-28T09:21:47.877 回答