此代码在最后一行引发分段错误。 Header是指向连续内存块的指针,该内存块全为0,并且取消引用余数返回0,这可能与问题有关。我仍觉得这应该有用,问题是什么?
void setHeader(void *header, size_t payload) {
size_t *remainder = (size_t*)((char *)header + (payload + 4));
*remainder = payload;
}
答案 0 :(得分:0)
为什么你认为这应该有效?除非指向的对象足够大以至于添加payload + 4
不超过对象的大小,否则指针算术具有未定义的行为。即使定义了算术(例如,如果对象大小正好是payload + 4
),则解除引用超过数组末尾的槽一个具有UB。您需要确保您传递的地址足够大的对象才能使您的代码正常工作。