删除指针错误
Delete pointer error
我很困惑为什么在我创建了一个指针并尝试delete
它之后,我会收到错误消息。 以下是我一直在使用的一些精简代码:
func()
{
ptree *resultTree = new ptree;
resultTree = &getNodeptree(pt);
delete resultTree;
}
ptree& getNodeptree (ptree &pt)
{
BOOST_FOREACH(ptree::value_type &v, pt.get_child("root"))
{
ptree &temp = v.second;
return temp;
}
}
据我了解resultTree
仍然需要删除,因为它的内存仍在堆上。 但是,尝试这样做会产生:
*** glibc detected *** /home/nathan/Programming/Project_Code/MyBoostXmlTest/Debug/MyBoostXmlTest: free(): invalid pointer: 0x00000000018347b8 ***
有人可以解释为什么在这种情况下调用delete
会产生错误吗?
当你删除resultTree
时,你正在删除从函数调用传递给你的内存 getNodeptree
。并且您未能从对 new 的显式调用中删除内存。
func()
{
ptree *resultTree = new ptree; // you will need to delete this one
resultTree = &getNodeptree(pt); // now it points to something else!
delete resultTree; // now you delete something you shouldn't
}
由于getNodeptree
返回引用,因此您真的不应该删除它。
您确实需要删除内存,但是在 resultTree = &getNodeptree(pt);
中重新分配指针时会覆盖分配的地址。我不明白应该发生什么,所以我恐怕现在不能提供建议。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 运行几次后合并段错误C++(指针算术)
- LinkedList实现C 错误指针间接
- 虚幻引擎 4.18.0,VS2017,不允许指向不完整类类型的错误指针
- Xcode 错误:指针和双精度之间的比较
- 未分配正在释放的本机node.js插件错误指针
- 错误指针:解析令牌时无法计算表达式
- C++-va_list错误指针
- 为什么我收到错误" (指针的名称)不是模板)?
- mmap 错误:分段错误/指针无效错误
- C++ Winsock2 错误指针断点触发
- C++ 代码中的错误指针错误
- 数组错误指针上的增量运算符
- MAKEINTRESOURCE 返回资源 ID 的错误指针
- 分段错误C++指针
- 段错误指针
- C++ 错误 :: 指针数组的EXC_BAD_ACCESS
- 通过模糊 mat 从 std::vector: <int>cv::Exception 中获取错误指针
- 正在解决编译器错误:指针可能未初始化