C++ 马洛克';d内存与std::make_shared创建的对象重叠

C++ 马洛克';d内存与std::make_shared创建的对象重叠,c++,c,memory-management,malloc,fuse,C++,C,Memory Management,Malloc,Fuse,调用malloc返回一个指向内存块的指针,该内存块与make\u shared已经分配的内存重叠。我正在构建一个FUSE客户端,malloc调用在FUSE库中,但我不确定这是否相关。我无法在程序外重现错误,我也不知道下一步该怎么办。Valgrind没有发现任何错误,直到共享ptr管理的对象中的指针损坏并被使用。此错误是使用新建创建共享ptr,然后将其键入弱ptr并将其删除的结果。我必须对它进行类型转换,因为我正在使用一个C库(FUSE)并向它传递一个指向弱\u ptr的指针,它提供了一个uint

调用
malloc
返回一个指向内存块的指针,该内存块与
make\u shared
已经分配的内存重叠。我正在构建一个FUSE客户端,malloc调用在FUSE库中,但我不确定这是否相关。我无法在程序外重现错误,我也不知道下一步该怎么办。Valgrind没有发现任何错误,直到
共享ptr
管理的对象中的指针损坏并被使用。

此错误是使用
新建
创建
共享ptr
,然后将其键入
弱ptr
并将其删除的结果。我必须对它进行类型转换,因为我正在使用一个C库(FUSE)并向它传递一个指向
弱\u ptr
的指针,它提供了一个
uint64\u t
来存储句柄。然后,库调用my函数并将包含指针类型转换为
uint64\t

的结构传递给它们。您是否尝试在
valgrind
下运行它?如果
malloc()
的内部数据结构损坏,则可能会出现类似的情况。是的,在指针损坏并使用之前,不会发现任何错误。您确定共享指针没有释放其对象的所有权吗?这将导致对象被删除,而另一个
malloc
调用可以重用该内存。当对象被覆盖时,实际上有两个共享的\u ptr用于对象,一个在堆栈上,另一个在向量中。按照可能性的降序,以下是我的猜测:(1)您所声称的是错误的,你误解了形势。(2) 通过使用一组可怕的库,您不知何故获得了两个内存分配系统,这两个系统都声称拥有相同的内存,可能是因为它们引用了两个不同的地址空间。(3) 您在编译器和运行时中发现了一个bug。(4) 宇宙射线不断地在你的计算机中翻转位,从而导致意外的行为。