[英]C++ error: How to solve malloc: *** error for object ... pointer being freed was not allocated
为什么我编译后会收到此错误:
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)中崩溃了。 要验证是否是这种情况,请在调用前后放置诊断 printf,并且崩溃应该发生在调用之间。 可能 adjPtr 变空并导致擦除失败,但逻辑错误的确切位置很难说。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.