[英]Why won't &x + 1 cause seg fault?
在这个线程中 ,它使用&x + 1
来确定一些随机struct x的大小。 我想知道为什么这是一个合法的解决方案? 这会导致分段错误吗?
我的理解是只要&x + 1
保留在当前线程可访问的内存中,它就没问题,但如果&x + 1
以某种方式尝试访问超出其允许范围的内存,则会导致seg错误,那对吗?
第三,C标准明确允许指针指向一个超过数组末尾的指针。
...如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出...
正如@alk指出的那样,在进行指针运算时,指向对象的指针被视为长度为1的数组。
出于这些运算符的目的,指向不是数组元素的对象的指针与指向长度为1的数组的第一个元素的指针的行为相同,其中对象的类型为其元素类型。
(从第6.5.6.8和C99草案6.5.6.7 这里 )
首先,在C中,所有线程都可以访问任何线程都可访问的所有内存。 线程在这里不是问题。
其次,你永远不会取消引用指针&x + 1
,所以你无论如何都不会访问任何内存。
所以你的代码是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.