我对C ++内部机制并不熟悉,所以我完全迷失了我最近遇到的访问冲突。
我在Visual Studio 2008中编写C ++。我的应用程序基于库 SRILM (一个NLP工具包)构建,并且一直运行良好。但是,当我最近尝试合并新功能并在我的解决方案中添加了一个外部库 tinyXML 时,出现了奇怪的问题!
在SRILM lib中抛出了一个违规访问错误,它在添加tinyXML之前顺利运行。
代码:
inline void Map_freeKey(const char *key) { free((void *)key); }
tester.exe中0x77e9e39e处的未处理异常:0xC0000005:Access 违规读取位置0x4edbe8b7。
并且指针“const char * key”的地址既不是0x4edbe8b7也不是0x77e9e39e,所以我猜这些位置应该是代码堆栈中的某个位置,但我不知道:(你可以查看下图更多细节。
此问题可在完全相同的位置重现。当boost库尝试在我的代码中编译正则表达式时,也会出现“死锁”运行时错误。这很奇怪,在我删除新添加的tinyXML库之后,所有这些问题都消失了。
我已经在访问冲突方面进行了大量搜索,但由于我的问题似乎涉及系统代码堆栈中的错误而且我不知道如何处理。所以我发布这个问题希望得到一些帮助:
如果您发现外部lib导致这种奇怪的访问冲突,您会怎么做?