0

我正在使用基于 Mac OS X 和 iPhone OS 附带的 ICU 库构建的精彩 RegexKitLite 框架。到目前为止,它一直一帆风顺,除了在搜索匹配项时间歇性出现的这个错误:

Internal Error
Invalid parameter not satisfying:
(cacheSlot->setToHash == buffer->hash) && (cacheSlot->setToLength == buffer->length) && (cacheSlot->setToUniChar == buffer->uniChar)

知道可能是什么原因造成的吗?

4

1 回答 1

1

注意:我是 RegexKitLite 的作者。

这是 RegexKitLite 中的内部断言失败。有很多内置的内部断言检查。这是说从缓存中检索缓存的已编译正则表达式后,由于某种原因,检索到的缓存正则表达式没有完全按照应有的方式设置。

您可以做的最好的事情是在sourceforge.net RegexKit bug tracker提交错误报告。如果可能的话,提交一个重现错误的测试用例。这是一个总的,疯狂的,出乎意料的猜测,但根据断言消息,我敢打赌它与您使用的匹配操作有关range:参数,并且该范围不断“移动”和缩小。该范围可能跨越小/大缓冲区大小,大约 2048 个字符。另一种可能性是搜索包含 Unicode 字符的字符串,RegexKitLite 正在使用字符串直接缓冲区,可能在可变字符串和后备缓冲区已被重新分配,因为它增长或缩小...字符串直接缓冲。

希望这将帮助您缩小触发断言失败的极端情况。嘿,至少它是在检测问题,而不是一味地进行分段故障或返回虚假结果字符串。:)

于 2009-08-14T15:55:36.290 回答