Pcrecpp析构函数
问题描述:
int main(int argc, char* argv[])
{
std::string s1;
pcrecpp::RE re("(.*)");
re.PartialMatch("This is a test progream", &s1);
return 0;
}
我想比赛结果存入s1
,但是当我运行该程序,出现错误:Pcrecpp析构函数
这是堆栈跟踪信息:
pcrecpp版本:8.36
编译器:vs2005
答
我找到了一个更好的方法来解决这个问题。由于pcrecpp.dll将malloc内存,这将导致在Windows上的错误。所以,首先,我建立pcre.dll;然后将pcrecpp文件添加到我的项目中,从而解决内存malloc问题。 使用pcre.8.36为例: 1.使用PCRE文件生成pcre.dll:
pcre_byte_order.c
pcre_chartables.c
pcre_compile.c
pcre_config.c
pcre_dfa_exec.c
pcre_exec.c
pcre_fullinfo.c
pcre_get.c
pcre_globals.c
pcre_jit_compile.c
pcre_maketables.c
pcre_newline.c
pcre_ord2utf8.c
pcre_refcount.c
pcre_string_utils.c
pcre_study.c
pcre_tables.c
pcre_ucd.c
pcre_valid_utf8.c
pcre_version.c
pcre_xclass.c
pcre.h
pcre_internal.h
ucp.h
config.h
-
添加
pcre_scanner.cpp pcre_stringpiece.cpp pcrecpp.cpp pcre_scanner.h pcre_stringpiece.h pcrecpparg.h
到我的项目,好!
您可以显示出现断点的堆栈跟踪吗?如果你加入调用方法或函数,你能确定LocalPcreFree释放哪个指针吗? 这就是说,我的第一个猜测是,这是一个内部pcre错误,这是由于malloc在第一个pcre内部全局调用和free调用时发生的malloc自由定义之间的变化。换句话说,当malloc被调用时,它在调用free时使用了不同的堆。也许改变包含顺序将有所帮助。 –
谢谢。我将改变包含的顺序并重试。我附在下面的堆栈跟踪 – guardiola