C程序中的指针

时间:2013-04-23 11:12:06

标签: c pointers

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

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

第二段代码: -

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

它们都编译没有错误。但是第一个运行而第二个运行不运行。有人可以解释一下吗?

3 个答案:

答案 0 :(得分:7)

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

int *a = malloc(sizeof(int));
int *b = malloc(sizeof(int));
*a = 1;
*b = 1;
free(a);
free(b);

答案 1 :(得分:2)

该问题的共鸣是指针没有任何内存地址,因此在使用它们之前必须给出合法的内存地址。顺便说一下,你的两个代码都是错误的。

答案 2 :(得分:1)

    int *a,*b;
    *a=1;

此处,ab具有垃圾值(指向随机位置)。当你执行*a = 1时,它将写入(覆盖)到该位置的任何位置[只要您允许访问它]。有时,这可能无效,您将获得segmentation fault