【发布时间】:2022-01-13 11:34:51
【问题描述】:
#include<stdio.h>
int main(){
int i = 3;
int *k;
k = &i;
k++;
printf("%d ",*k);
return 0;
}
输出:垃圾值
#include<stdio.h>
int main(){
int i = 3;
int *j;
int **k;
j = &i;
k = &j;
k++;
printf("%d ",**k);
return 0;
}
输出:运行时错误
在这两个程序中,k 都是一个指针变量,它访问未初始化的内存。 我的问题是为什么它在第二个程序中返回为运行时错误
【问题讨论】:
-
这是未定义的行为。你得到你得到的。
-
虽然这都是未定义的行为,但取消引用垃圾指针比取消非一指针更可能导致某种运行时错误。在第二个
*k是一个垃圾指针值,所以**k取消引用一个垃圾指针。
标签: c pointers memory memory-management double-pointer