我在多线程环境中运行以下 c++ 代码:
A* a = (A*) (_x->b);
a->DoStuff();
A
是一个具体的类,_x
是A
(比如说 type X*
)的成员,并且b
是一个void *
.
此外,this
它也是一个A*
,它具有不同的内存位置,但与转储显示的数据相似_x->b
。
我在取消引用时遇到了莫名其妙的崩溃。生成的转储文件非常详细,它显示_x
状态良好并_x->b
指向有效的非零内存地址。转储还显示,在第二个语句中,a
为 0,这就是崩溃首先发生的原因。
我的问题:这次崩溃的原因是明确的堆损坏,还是更根本的原因?我计划使用 gflags 或 valgrind 等堆跟踪工具对此进行调试,但我很好奇是否有任何其他原因导致看似有效的指针在 c 样式转换后会以某种方式变为空。