编译后为什么会出现此错误:
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);
}
}
答案 0 :(得分:0)
很难,因为该功能不能直接免费拨打电话。猜测,它在擦除(adjPtr)时崩溃了。要验证是这种情况,请在调用之前和之后放置诊断printf,并且应在调用之间发生崩溃。可能adjPtr是空的,导致擦除失败,但确切地说逻辑错误在哪里很难说。