为什么& x + 1不会导致seg错误?

时间:2014-02-17 18:50:00

标签: c

this thread中,它使用&x + 1来确定某个随机struct x的大小。我想知道为什么这是一个合法的解决方案?这会导致分段错误吗?

我的理解是只要&x + 1保留在当前线程可访问的内存中,就可以了,但如果&x + 1以某种方式尝试访问超出其允许范围的内存,它会导致seg故障,是吗?

2 个答案:

答案 0 :(得分:6)

第三,C标准明确允许指针指向一个数组末尾的指针。

  

...如果指针操作数和结果都指向了元素   相同的数组对象,或者超过数组对象的最后一个元素,   评估不应产生溢出......

正如@alk指出的那样,在进行指针运算时,指向对象的指针被视为长度为1的数组。

  

出于这些运算符的目的,指向对象的指针   不是数组的元素与指向第一个元素的指针的行为相同   长度为1的数组的元素,其对象的类型为   元素类型。

(来自C99草案here的第6.5.6.8和6.5.6.7节)

答案 1 :(得分:5)

首先,在C中,所有线程都可以访问任何线程都可访问的所有内存。线程在这里不是问题。

其次,你永远不会取消引用指针&x + 1,所以你无论如何都没有访问任何内存。

所以你的代码是正确的。

相关问题