-1

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

4

1 回答 1

0

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

  1. 库创建的对象不太可能是由malloc. 它可能包含指向其他分配的指针,如果只free使用它,您将失去释放这些分配的能力并出现严重的内存泄漏。

  2. 库返回的指针可能不是指向malloc-obtained 对象的开头,而是指向它内部的某个点。在这种情况下,将它传递给free调用未定义的行为,并且可能看起来可以工作、崩溃或损坏内存,因此您只能在很久以后才能看到损坏的影响。

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

最重要的使用规则free是,除非该指针是由 (或“好像由”) 获得的,否则绝对不能传递任何指针。一些库可能会记录它们返回由 获得的指针,并且您应该在不再需要它时将其传递给它,但除非您以书面形式看到此合同,否则切勿将由库函数获得的指针传递给。freemallocmallocfreefree

至于libxml2,这里是手册:

http://xmlsoft.org/html/

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

于 2013-06-21T21:29:47.807 回答