在this thread中,它使用&x + 1
来确定某个随机struct x的大小。我想知道为什么这是一个合法的解决方案?这会导致分段错误吗?
我的理解是只要&x + 1
保留在当前线程可访问的内存中,就可以了,但如果&x + 1
以某种方式尝试访问超出其允许范围的内存,它会导致seg故障,是吗?
答案 0 :(得分:6)
第三,C标准明确允许指针指向一个数组末尾的指针。
...如果指针操作数和结果都指向了元素 相同的数组对象,或者超过数组对象的最后一个元素, 评估不应产生溢出......
正如@alk指出的那样,在进行指针运算时,指向对象的指针被视为长度为1的数组。
出于这些运算符的目的,指向对象的指针 不是数组的元素与指向第一个元素的指针的行为相同 长度为1的数组的元素,其对象的类型为 元素类型。
(来自C99草案here的第6.5.6.8和6.5.6.7节)
答案 1 :(得分:5)
首先,在C中,所有线程都可以访问任何线程都可访问的所有内存。线程在这里不是问题。
其次,你永远不会取消引用指针&x + 1
,所以你无论如何都没有访问任何内存。
所以你的代码是正确的。