【发布时间】:2013-04-18 01:48:40
【问题描述】:
对malloc 的调用将返回一个指向内存块的指针,该内存块与make_shared 已分配的内存重叠。我正在构建一个 FUSE 客户端,malloc 调用在 FUSE 库中,但我不确定这是否相关。我无法在我的程序之外重现该错误,而且我不知道下一步该做什么。直到 shared_ptr 管理的对象中的指针被损坏然后被使用,Valgrind 才发现任何错误。
【问题讨论】:
-
你试过在
valgrind下运行它吗?如果malloc()的内部数据结构损坏,这样的事情听起来是可能的。 -
是的,直到指针损坏然后被使用才发现错误。
-
您确定共享指针没有释放其对象的所有权吗?这将导致对象被删除,另一个
malloc调用可以重用该内存。 -
对象被覆盖时实际上有2个shared_ptrs,一个在栈上,另一个在向量中。
-
按可能性降序排列,以下是我的猜测:(1)您声称的内容是错误的,您误解了情况。 (2)您以某种方式让两个内存分配系统都通过一组正在使用的地狱般的库声明相同的内存,可能是因为它们引用了两个不同的地址空间。 (3) 您在编译器和运行时中发现了一个错误。 (4) 宇宙射线不断地在你的计算机中翻转比特以引起意想不到的行为。
标签: c++ c memory-management malloc fuse