可能堆腐败,但它可能是别的东西?

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

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

A是一个具体的类, _xA的成员(比方说X*类型), bvoid *

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

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

我的问题:这次崩溃的原因是一个确定的堆腐败,或者它可能是更基础的东西? 我打算使用gflags或valgrind等堆跟踪工具进行调试,但我很好奇,是否有任何其他原因,看似有效的指针在C风格转换后会以某种方式变为空值。

链接地址: http://www.djcxy.com/p/14447.html

上一篇: Probably heap corruption, but could it be something else?

下一篇: C++ Heap Corruption