当gcc编译然后运行时,
编码
国际*p;
int main() {*p = 1;}
导致段错误。
显然,内存位置
不能写入 p 中包含的内容。
为什么????
另一方面,
int q[];
int main() {*q = 1;}
运行得很好。
这里发生了什么??
为什么 p 只包含只读内存?
最佳答案
第一个例子有一个狂野的(没有明确初始化的)指针。因为它不是一个自动变量,所以它被设置为 0,这显然不是你拥有的内存。您可以通过打印出来看到这一点:
printf("%p\n", p)
至于第二个,C99 §6.9.2 其实就是以这个为例:
通常,具有暂定定义(无初始化器)的对象使用 0 进行初始化,对于数组而言,这意味着元素值为 0 的 1 元素数组。
关于c - 全局指针导致段错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3225016/