问题解除引用类型void **

时间:2014-07-16 16:01:25

标签: c pointers pointer-arithmetic

我有一个指向指针的数组:

void ** buckets.

这些指针中的每一个指向一些内存blob,其中包含指向另一个内存块的指针。

我试图找到一个指向某些内存的指针:

void *cell = cm->buckets[0] // for the first blob it is pointing to.

然而,它给了我一个段错误并且gdb不是很有用。为什么会发生这种情况?处理这种情况的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

检查buckets中存储的地址值。最有可能的是,它尚未初始化(使用newmalloc等),buckets内的地址是一些随机受保护的内存地址。

buckets[0]相当于*buckets或取消引用buckets中的值。因此,系统会尝试访问此受保护地址的内容,从而导致出现段错误。

答案 1 :(得分:0)

在您的示例代码中,有两个可能的地方可能会产生此错误:cmbuckets。在GDB中,在执行此行之前,首先检查cm以确保它指向您期望的位置。如果是,请确保buckets指向合理的位置。