为什么我在编译后得到这个错误:
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);
}
}
这很难,因为该函数没有直接调用free。我猜,它在擦除(adjPtr)中崩溃了。为了验证这种情况,在调用之前和之后放置一个诊断打印,并且在调用之间应该发生崩溃。adjPtr可能是空的,这导致擦除失败,但确切的逻辑错误是很难告诉。