考虑 C 中的以下 2 个代码:- 第一个代码:-
int main()
{
int *a,*b;
*a=1;
}
第二个代码: -
int main()
{
int *a,*b;
*a=1;
*b=1;
}
它们都编译没有错误。但是第一个运行,第二个没有。谁能解释一下?
它们都表现出未定义的行为:第一个运行的原因是默认情况下恰好位于的指针指向a
内存中写入不会导致崩溃的区域(它仍然是非法的)。你需要初始化你的指针来解决这个问题:
int *a = malloc(sizeof(int));
int *b = malloc(sizeof(int));
*a = 1;
*b = 1;
free(a);
free(b);
这个问题的原因是指针没有任何内存地址,所以你必须在使用它们之前提供一个合法的内存地址。顺便说一句,你的两个代码都是错误的。
int *a,*b;
*a=1;
在这里,a
并且b
有垃圾值(指向随机位置)。当你这样做时*a = 1
,它将写入(覆盖)到它指向的那个位置[如果你被允许访问它]。有时,这可能不起作用,您会得到一个segmentation fault