我在 C\C++ 中创建无锁队列,队列工作正常,但出现错误,Visual Studio 显示它是免费操作,并且它在此函数上崩溃
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer( const void * pUserData)
当有很多阅读线程(使用免费的线程)时,就会发生这种情况,如果我删除 free 它适用于任意数量的线程,或者如果我放置简单的 printf("random stuff"); (它明显减慢了一点)它适用于任意数量的线程。所以我只是不知道该怎么做:(看起来如果很多线程试图释放内存窗口无法处理它,这可能是问题吗?当变量地址变为“魔术”时,我也会遇到访问冲突(0xABABABAB, 0xCDCDCDCD..),我发现这些也和堆有关..
在 linux 中,Posix 线程没有任何问题,适用于任意数量的线程。
那么问题来了,为什么减慢线程会有所帮助(或者这是巧合?)以及如何在不减慢速度的情况下摆脱堆问题?欢迎任何关于堆内存的建议。