是否有引用的地方是否需要释放某个函数返回的对象?目前,我只是尝试... Free()函数返回的对象的名称中包含诸如“new”,“copy”,“create”之类的单词,如果程序没有崩溃,我假定该调用是正确的。如何判断哪个libxml2函数返回需要释放的对象?
-1
A
回答
0
这是一个非常糟糕的主意。如果您正在使用返回指向已分配对象指针的库API ,尤其是如果分配的对象是“不透明”类型的,如果您不直接访问它们,而只是将它们传递给其他函数,那么库几乎当然提供了自己的函数来关闭/释放/破坏/释放这些对象。有多种原因,你不应该只使用free
:
由库中创建的对象不可能是由
malloc
获得一个分配。它可能包含指向其他分配的指针,如果你只是free
它,你将失去释放这些分配和内存泄漏的能力。库返回的指针可能不是
malloc
对象的开始,而是其中的某个点。在这种情况下,将它传递给free
会调用未定义的行为,并且可能看起来工作正常,或者崩溃或损坏内存,以致于以后只会看到损坏的后果。库可能会保持它已分配的对象的内部指标(标准库
stdio
将是一个很好的例子),在这种情况下,如果你free
其背后的对象,它将以后的访问释放的内存并调用未定义的行为。
使用free
最重要的规则是,你必须从未通过任何指针free
除非被malloc
获得的指针(“仿佛被”或)。有些图书馆可能会记录他们返回的指针,通过malloc
获得,并且当您不再需要时,您应该将其传递到free
,但除非您以书面形式看到此合约,否则不要将由库函数获得的指针传递给free
。
至于libxml2
,这里是本手册:
它应该包含关于如何释放被分配的libxml2对象的信息。
相关问题
- 1. 你如何判断你是否需要释放一个对象?
- 2. 如何释放需要从函数返回的双指针?
- 3. 我是否需要释放一个返回的NSError对象?
- 4. 如何判断在java线程中要同步哪个对象?
- 5. 如何释放返回的对象?
- 6. allocWithZone对象需要释放
- 7. 我需要从GetNamedSecurityInfo API中释放哪些返回的参数?
- 8. 如何判断对象何时发送释放消息?
- 9. 我是否需要释放从gtk_builder_get_object返回的对象?
- 10. 如何判断对象是否被释放
- 11. 返回后释放对象?
- 12. OpenGLES释放需要返回的变量
- 13. 如何判断哪个文件需要在这里?
- 14. 如何判断在CMakeLists.txt中需要哪个最小CMake版本?
- 15. 从C#调用Windows API函数时需要明确释放哪些对象?
- 16. 由函数返回的释放自定义对象
- 17. 您是否释放函数中返回的对象?
- 18. 如何判断空对象?
- 19. 如何判断没有返回值的函数的结果?
- 20. 如何判断我在xml对象中的哪个位置
- 21. 函数如何返回一个对象?
- 22. Memory/Obj-C正确的对象释放。哪些需要发布?
- 23. 如何判断是否删除函数返回的指针
- 24. MooTools:如何判断对象是数组?
- 25. 是否需要释放该对象?
- 26. 我是否需要释放UITouch对象?
- 27. 我是否需要释放此对象?
- 28. C#用户控件 - 如何判断控件需要数据的包含对象
- 29. 需要释放SHGetDesktopFolder返回的IShellFolder接口?如何?
- 30. 如何返回一个需要2个参数的函数1
By ...我的意思是“...”将被替换为相应的obj类型。例如, xmlDocPtr doc = xmlParseMemory(...); xmlDocFree(doc); 如果您查看xmlParseMemory的手动条目,则没有说明释放文档。 –
我只能猜测,自从创建了对象“doc”之后,它必须被释放,而且这似乎工作。但有些情况下,不容易判断一个obj是否被创建或引用,并且一个... Free会在某处一路炸开。 –
如果你正在谈论调用图书馆的'xmlDocFree'函数和类似的而不是'free',我认为你做的是正确的事情,但很难用一些记录不完善的库来告诉它...... –