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_)!!因为当我评论那条线时没有死锁 我该如何解决这个错误?
答案 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);
你能展示处理你的载体的部分吗?
很抱歉,不在评论中,没有足够的分数。