Windows heap corruption C++C
Windows heap corruption C++C
我正在C\C++中创建无锁定队列,队列工作正常,但我遇到了错误,Visual studio显示它是自由操作的,而且它在这个函数上崩溃了
extern"C"_CRTIMP int __cdecl_CrtIsValidHeapPointer(const void*pUserData)
当有很多读取线程(使用free的线程)时就会发生这种情况,如果我删除free,它可以与任何数量的线程一起工作,或者如果我放入简单的printf("随机的东西");(速度慢了一点)它可以很好地处理任何数量的线程。所以我不知道该怎么办:(看起来如果很多线程试图释放内存,窗口无法处理,这可能是问题所在吗?此外,我还遇到了访问冲突,当变量地址变为"魔术"(0xABABABAB,0xCDCDCD..)时,我发现这些也与堆有关。)。。
在linux中,Posix线程没有任何问题,可以与任何数量的线程一起工作。
所以,问题是,为什么放慢线程速度会有所帮助(或者这是巧合?)以及如何在不放慢速度的情况下解决堆问题?欢迎任何关于堆内存的建议。
来源:queue.cqueue.h
当我试图从MFC gui调用我的一个dll时,我遇到了类似的问题。
如果您通过静态链接创建了一个dll,而将另一个dll/exe作为MSVC Runtime的动态链接,则可能会遇到这种问题。
与针对MSVC Runtime的动态链接dll相比,针对MSVC运行时的静态链接dll似乎在不同的上下文中运行,即使它们在同一应用程序中使用。
基本上,如果释放或返回从两个不同上下文创建的指针,就会发生堆损坏。如果你在VS中调试程序,它不会显示任何错误。但如果运行它,它将在退出返回上下文后显示堆损坏错误。
一种可能的解决方案是根据MSVC运行时动态链接所有dll
希望这能有所帮助,
关于
- 逻辑'double free or corruption (fasttop)'错误
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- OpenCV VideoCapture Partial Frame Corruption
- 二叉树中shared_ptr "double free or corruption"
- 如何找到导致"malloc(): memory corruption: 0x00"的线
- 为什么这段代码会导致"heap corruption detected"?
- Windows heap corruption C++C
- D3D11 CORRUPTION: ID3D11DeviceContext::RSGetScissorRects
- 我在C++中使用删除运算符时遇到问题。我在运行时不断收到"double free or corruption (fasttop)"错误
- JNA: __stdcall ESP corruption
- Double free() or corruption:C++
- Heap corruption after new char[strlen
- 什么是"one-stop memory corruption"?
- 重新排列代码行时未引发错误"Double free or corruption"
- Corruption Of Heap
- 运行时错误:"*** glibc detected ***: double free or corruption (out)"
- 实现动态数组数据结构时出现"double free or corruption"错误
- 与"glibc detected: vector double free or corruption (out)"崩溃