-4

考虑 C 中的以下 2 个代码:- 第一个代码:-

int main()
{
    int *a,*b;
    *a=1;
}

第二个代码: -

int main()
{
    int *a,*b;
    *a=1;
    *b=1;
}

它们都编译没有错误。但是第一个运行,第二个没有。谁能解释一下?

4

3 回答 3

7

它们都表现出未定义的行为:第一个运行的原因是默认情况下恰好位于的指针指向a内存中写入不会导致崩溃的区域(它仍然是非法的)。你需要初始化你的指针来解决这个问题:

int *a = malloc(sizeof(int));
int *b = malloc(sizeof(int));
*a = 1;
*b = 1;
free(a);
free(b);
于 2013-04-23T11:14:33.903 回答
2

这个问题的原因是指针没有任何内存地址,所以你必须在使用它们之前提供一个合法的内存地址。顺便说一句,你的两个代码都是错误的。

于 2013-04-23T11:19:26.933 回答
1
    int *a,*b;
    *a=1;

在这里,a并且b有垃圾值(指向随机位置)。当你这样做时*a = 1,它将写入(覆盖)到它指向的那个位置[如果你被允许访问它]。有时,这可能不起作用,您会得到一个segmentation fault

于 2013-04-23T11:18:33.277 回答