当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/

10-11 04:25
查看更多