我有一个指向指针的数组:
void ** buckets.
这些指针中的每一个指向一些内存blob,其中包含指向另一个内存块的指针。
我试图找到一个指向某些内存的指针:
void *cell = cm->buckets[0] // for the first blob it is pointing to.
然而,它给了我一个段错误并且gdb不是很有用。为什么会发生这种情况?处理这种情况的正确方法是什么?
答案 0 :(得分:1)
检查buckets
中存储的地址值。最有可能的是,它尚未初始化(使用new
,malloc
等),buckets
内的地址是一些随机受保护的内存地址。
buckets[0]
相当于*buckets
或取消引用buckets
中的值。因此,系统会尝试访问此受保护地址的内容,从而导致出现段错误。
答案 1 :(得分:0)
在您的示例代码中,有两个可能的地方可能会产生此错误:cm
和buckets
。在GDB中,在执行此行之前,首先检查cm
以确保它指向您期望的位置。如果是,请确保buckets
指向合理的位置。