运行Google CTemplate首页的例子遇到_CrtIsValidHeapPointer异常
最近打算使用Google CTemplate作為模板引擎,但是運行其主頁上的例子居然出現了錯誤。程序運行的結果正常,但是在退出時導致了_CrtIsValidHeapPointer異常,主要是釋放string變量時出現了錯誤。搜索了一下Google CTemplate的討論組,說如果編譯庫文件所使用的CRT版本和編譯程序所使用的CRT版本不一致會導致這個問題。DLL庫采用的CRT是多線程DLL方式的,所以應用程序也必須使用這個方式,這就需要在應用程序的工程選項中將CRT由默認的單線程方式改為多線程DLL方式。如下圖所示。
?
不過這有時不太方便,也可以把CTemplate所需要的文件直接加到工程中,好在文件不多:
- src\base\arena.cc
- src\htmlparser\htmlparser.cc
- src\htmlparser\jsparser.cc
- src\windows\port.cc
- src\htmlparser\statemachine.cc
- src\template.cc
- src\template_dictionary.cc
- src\template_from_string.cc
- src\template_modifiers.cc
- src\template_namelist.cc
- src\template_pathops.cc
記得在這些文件的編譯屬性中選擇“不使用預編譯頭”,否則會出現編譯錯誤。
?
?2008年8月31日:以上介紹的是0.90版本,在0.91版本中src\template_from_string.cc 文件不存在了。
?2008年9月15日:采用上面介紹的方法有個缺陷,就是會出現很多編譯和鏈接的警告C4251和LNK4049、LNK4071。這主要是因為在CTemplate的代碼中,定義了:
?
Code#ifndef?CTEMPLATE_DLL_DECL
#?define?CTEMPLATE_DLL_DECL??__declspec(dllimport)
#endif
所以需要在編譯的命令行加上“/D CTEMPLATE_DLL_DECL=”。
?
轉載于:https://www.cnblogs.com/zealsoft/archive/2008/08/29/1279652.html
總結
以上是生活随笔為你收集整理的运行Google CTemplate首页的例子遇到_CrtIsValidHeapPointer异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手工修复损坏的域树
- 下一篇: 未来计算在“云-端”