考虑C中的以下2个代码: - 第一个代码: -
int main()
{
int *a,*b;
*a=1;
}
第二段代码: -
int main()
{
int *a,*b;
*a=1;
*b=1;
}
它们都编译没有错误。但是第一个运行而第二个运行不运行。有人可以解释一下吗?
答案 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;
此处,a
和b
具有垃圾值(指向随机位置)。当你执行*a = 1
时,它将写入(覆盖)到该位置的任何位置[只要您允许访问它]。有时,这可能无效,您将获得segmentation fault