这是野指针问题
访问野指针问题在运行时不报错,而是卡住并结束,且return value 3221225477 ;只有在调试时,运行到访问野指针的语句时会报错signal SIGSEGV, Segmentation fault ;
原因:指针定义之后却没有初始化,会指向一个随机的无法访问的地址(但不是NULL);
例一:
include <stdio.h>
int main(){
int a=0;
scanf("%d",a);
printf("%d\n",a);
return 0;
}
仔细看上边的代码段,可能乍一看就是输入一个数然后就输出,为什么调试会出现这个问题,其实仔细一看就能发现,你的输入位置将&a写成了a,就会出现这个报错。
例二:
#include <stdio.h>
int main(){
char *p;
p = NULL;
*p = 'x';
printf("%c", *p);
return 0;
}
当你用到指针的时候,如果你用的这个指针是个空指针,并且你在尝试向空指针里面去写入数据,那么你调试的时候,也会出现最开始的那个弹窗。
例三:
内存越界,或者是当用到数组时候,会出现数组越界的情况
#include <stdio.h>
int main(){
int a[1];
printf("%c", a[1000000000]);
return 0;
}
这就是明显的数组越界,这只是给简单的一维数组越界,二维数组会出现更多可能的数组越界,所以你要检查你的数组是否越界。
例四:
你的定义的变量类型和想要输出的变量类型并不一致,有可能会出现这个问题,当然这并不一定,在不同的电脑跟环境下,可能会出现不同的情况。