我面临一个很难找到的错误。基本上,一个线程释放了一个内存块,而另一个线程仍然有对它的引用(这不是我的代码,这让一切变得更加困难…)
我是Windows平台的新手,但我已经尝试过在启用应用程序验证程序和PageHeap的情况下运行它——问题是,错误不再发生(可能是因为现在一切都变慢了——所以我正在处理一个经典的竞争条件)。在Linux下,我会尝试使用Valgrind来处理这种错误,但这可能会产生与应用程序验证程序相同的效果(不再看到错误)
在Mac OS X上,我会使用malloc_history来跟踪这个错误。那么,在Visual Studio或WinDbg中有类似的东西吗?我想做的是:
- 在调试器中运行程序,直到它以segfault中断为止
- 获取释放对象的地址,然后从中获取块实际被删除的堆栈
这在某些Windows/View Studio工具中可能吗?
我首先要解决这个问题:
"一个线程释放一个内存块,而另一个线程仍然有对它的引用"