objective-c - iOS 上的 libxml2 在使用 HTMLParser 解析 HTML 时导致 EXC_BAD_ACCESS 错误

标签 objective-c ios exc-bad-access libxml2

我一直致力于一个使用 libxml2 HTMLParser 模块在 iOS 上解析网页 HTML 的项目。每当我尝试解析包含以下行的网页时,都会从 libxml2 的 htmlParseDocument 收到 EXC_BAD_ACCESS 错误:

<?xml version="1.0" encoding="UTF-8"?>

如果我从 HTML 中删除这一行,解析工作完美。

另请注意,我正在使用 DTHTMLParser 类将 libxml2 SAX 回调绑定(bind)到 Objective-C 代码。

由于 htmlParseDocument 中的 EXC_BAD_ACCESS 没有太多内容可以继续,我构建了一个重现错误的示例 Xcode 项目。我在针对 iOS 5.1 的 Mountain Lion 上的 Xcode 4.4 中实现了它。首先它解析一个不包含违规行的 HTML 文件,然后它尝试解析包含违规行的文档并崩溃。您可以在这里下载:http://michaelmanesh.com/code/libxml2-crash.zip

最佳答案

DTHTMLParser 中的问题显然是在 libxml 中准备 c-callbacks 的方法没有将函数指针设置为在遇到处理指令时要调用的函数为 NULL。因此,处理指令导致 libxml2 尝试在某个随机地址调用函数,从而导致 EXC_BAD_ACCESS。

我解决了 DTHTMLParser 中的问题,方法是实现对在遇到处理指令时要调用的可选委托(delegate)方法的支持,如果委托(delegate)中未实现,则在处理程序结构中为 NULL。

关于objective-c - iOS 上的 libxml2 在使用 HTMLParser 解析 HTML 时导致 EXC_BAD_ACCESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875853/

相关文章:

ios - 什么是 iOS 7 中的 AppleBasebandManager 框架?

ios - 如何禁用 canOpenURL?我不希望我的 UIWebView 打开官方应用程序

ios - fetchedResultsController fetchedObjects 返回 NSCFString 而不是 NSArray

ios - 使用 Obejctive C 在 tableview 单元格中搜索特定值时如何获取所有数组值?

objective-c - Swift 类不符合带有错误处理的 Objective-C 协议(protocol)

objective-c - NSURL fileURLWithPath 其中 NSString 有一个空格

ios - 通知中心未在我的 obj c 类( utills 类或对象类)中触发。不是 View Controller

ios - 如何在 NSOperation 中运行异步进程

c++ - 试图读取AIFF文件意外错误与指针位置等有关

objective-c - -[CFRunLoopTimer 释放] : message sent to deallocated instance 0x62398f80