我已经学到了很难的方法,在每个依赖于不同MS VC运行时的两个dll之间共享堆指针并不是很好。很公平。基于这种经验以及正在调试的程序链的当前奇怪行为,我想问一个
问题:
使用不同的运行时(例如lib1.dll
)msvcrt.dll
使用一个运行时(例如lib2.dll
)可能会损坏vcruntime140d.dll
的堆吗?没有指针共享,只是在同一个运行时只有malloc / free对。
背景:(对于那些要求它的人)
msvcrt.dll
。libvideo.dll
。它取决于VS2015运行时。libvideosharp.dll
(编组)创建了libvideo.dll
托管C#包装器库(也是VS2015)。libvideosharp.dll
(也是VS2015)创建了C#测试应用。libvideo.dll
mallocs并且内置数据结构。libvideo.dll
调用一些ffmpeg初始化例程(av_register_all,avformat_network_init),这些例程可能在其自己的运行时上进行malloc。libvideo.dll
的数据结构已损坏(甚至没有以任何方式传递给ffmpeg libs,只是独立的malloced块)。