C ++错误:如何解决malloc:***错误的对象...被释放的指针未被分配

时间:2016-10-03 03:45:27

标签: c++ c pointers memory malloc

编译后为什么会出现此错误:

Program1(49296,0x7fff74b72000)malloc:***对象0x7f9222500040错误:未释放指针

有办法解决吗?我只在递归时得到它,但如果我拿出这一行:

if(counter == G.nameSet.size())
{  
  explore(G, *adjPtr);
}

......然后工作

void explore(Graph & G, Node & foo)
{
  G.nameSet.insert(foo.name());
  set <string> tempNameSet;

  list <Node> adjacentList = G.getAdjNodes(foo); 

  int y = adjacentList.size();
  list<Node>::iterator adjPtr = adjacentList.begin();

  for(int i=0; i < y;  i++ )
  {
tempNameSet = G.nameSet;

set<string>::iterator nSetPtr = G.nameSet.begin();
int counter = 0;
for (int j = 0; j < G.nameSet.size(); j++)
{ 
  if(*nSetPtr != adjPtr->name())
    counter++; 

  if(tempNameSet.size() > 1)
    nSetPtr  = tempNameSet.erase(nSetPtr);
}

if(counter == G.nameSet.size())
{  
  explore(G, *adjPtr);  //even when I plug in foo instead of *adjPtr, i get the same error
}

if(adjacentList.size() > 1)
  adjPtr  = adjacentList.erase(adjPtr);

  }
}

1 个答案:

答案 0 :(得分:0)

很难,因为该功能不能直接免费拨打电话。猜测,它在擦除(adjPtr)时崩溃了。要验证是这种情况,请在调用之前和之后放置诊断printf,并且应在调用之间发生崩溃。可能adjPtr是空的,导致擦除失败,但确切地说逻辑错误在哪里很难说。