我在多线程环境中运行以下c ++代码:
A* a = (A*) (_x->b);
a->DoStuff();
A
是一个具体的类,_x
是A
的成员(假设类型为X*
),b
是void *
}。
此外,this
也是A*
,它具有不同的内存位置,但与转储显示的数据类似_x->b
。
我在解除引用时遇到了莫名其妙的崩溃。生成的转储文件非常详细,它向我显示_x
处于良好状态,_x->b
指向有效的非零内存地址。转储还显示在第二个语句中,a
为0,这就是崩溃发生的原因。
我的问题:这次崩溃的原因是一个明确的堆腐败,还是可能是更基本的东西?我打算用堆跟踪工具(如gflags或valgrind)来调试它,但是我很好奇是否有任何其他原因导致看似有效的指针在c样式转换后以某种方式变为null。