如何判断哪个libxml2函数返回需要空闲的对象?

时间:2013-06-21 21:13:45

标签: c libxml2

是否有关于是否需要释放从某个函数返回的对象的引用?目前,我只是尝试... Free()函数返回的对象,如“new”,“copy”,“create”,在其名称中,如果程序没有崩溃,我认为调用是正确的。

1 个答案:

答案 0 :(得分:0)

这是一个非常糟糕的主意。如果你正在使用一个库API来返回指向已分配对象的指针,那么尤其是如果分配的对象是“不透明”类型,你不直接访问它们但只将它们传递给其他函数,然后该库几乎肯定提供自己的功能来关闭/释放/破坏/释放这些对象。您应该使用free

的原因有多种
  1. 库创建的对象不太可能是malloc获得的单个分配。它可能包含指向其他分配的指针,如果你只是free,它将失去释放这些分配的能力,并且内存泄漏不良。

  2. 库返回的指针可能不是malloc获取的对象的开头,而是指向其中的某个点。在这种情况下,将其传递给free会调用未定义的行为,并且可能会起作用,崩溃或损坏内存,以便您稍后才能看到损坏的影响。

  3. 库可能会保留已分配的对象的内部索引(标准库中的stdio就是一个很好的例子)在这种情况下,如果你free背后的对象它的后面,它将在以后访问释放的内存并调用未定义的行为。

  4. 使用free的最重要规则是,您必须永远不会传递任何指向free的指针,除非该指针是通过(或“仿制”)获得的{ {1}}。有些库可能会记录它们返回由malloc获得的指针,并且当你不再需要它时,你应该将它传递给malloc,但除非你以书面形式看到这个合同,否则永远不要传递指针通过库函数获得free

    至于free,这是手册:

    http://xmlsoft.org/html/

    它应包含有关如何释放libxml2分配的对象的信息。