0

我在多线程环境中运行以下 c++ 代码:

A* a = (A*) (_x->b); a->DoStuff();

A是一个具体的类,_xA(比如说 type X*)的成员,并且b是一个void *.

此外,this它也是一个A*,它具有不同的内存位置,但与转储显示的数据相似_x->b

我在取消引用时遇到了莫名其妙的崩溃。生成的转储文件非常详细,它显示_x状态良好并_x->b指向有效的非零内存地址。转储还显示,在第二个语句中,a为 0,这就是崩溃首先发生的原因。

我的问题:这次崩溃的原因是明确的堆损坏,还是更根本的原因?我计划使用 gflags 或 valgrind 等堆跟踪工具对此进行调试,但我很好奇是否有任何其他原因导致看似有效的指针在 c 样式转换后会以某种方式变为空。

4

0 回答 0