可能堆腐败,但它可能是其他东西?

时间:2012-11-15 22:24:59

标签: c++ casting crash-dumps heap-corruption

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

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

A是一个具体的类,_xA的成员(假设类型为X*),bvoid * }。

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

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

我的问题:这次崩溃的原因是一个明确的堆腐败,还是可能是更基本的东西?我打算用堆跟踪工具(如gflags或valgrind)来调试它,但是我很好奇是否有任何其他原因导致看似有效的指针在c样式转换后以某种方式变为null。

0 个答案:

没有答案