尝试设置解除引用的指针时出现分段错误?

时间:2012-08-11 23:05:18

标签: c pointers

此代码在最后一行引发分段错误。 Header是指向连续内存块的指针,该内存块全为0,并且取消引用余数返回0,这可能与问题有关。我仍觉得这应该有用,问题是什么?

void setHeader(void *header, size_t payload) {
   size_t *remainder = (size_t*)((char *)header + (payload + 4));
   *remainder = payload;
}

1 个答案:

答案 0 :(得分:0)

为什么你认为这应该有效?除非指向的对象足够大以至于添加payload + 4不超过对象的大小,否则指针算术具有未定义的行为。即使定义了算术(例如,如果对象大小正好是payload + 4),则解除引用超过数组末尾的槽一个具有UB。您需要确保您传递的地址足够大的对象才能使您的代码正常工作。