欢迎光临
我们一直在努力

关于C++错误:Signal: SIGSEGV (Segmentation fault)

这是野指针问题
访问野指针问题在运行时不报错,而是卡住并结束,且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;
}

这就是明显的数组越界,这只是给简单的一维数组越界,二维数组会出现更多可能的数组越界,所以你要检查你的数组是否越界。

例四:

你的定义的变量类型和想要输出的变量类型并不一致,有可能会出现这个问题,当然这并不一定,在不同的电脑跟环境下,可能会出现不同的情况。

赞(4)
版权归原作者所有,如有侵权请告知。达维营-前端网 » 关于C++错误:Signal: SIGSEGV (Segmentation fault)

相关推荐

  • 暂无文章

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址