注:非理论讲解,仅小白记录自己的解决过程!
Ubuntu18.04 系统,使用VScode执行c++文件时,出现以上所述错误,因为是复现大佬的程序,程序报错应该不是内存访问越界或堆栈溢出的错误。
在终端执行:g++ xx.cpp -o xx -O2 时,出现了以下警告,一开始因为只是警告,没有在意,后来把警告的地方修改后,Segmentation fault (core dumped)错误消失了。
//终端显示的警告
xxx.cpp: In function ‘void prepare()’:
xxx.cpp:350:15: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
fscanf(f_kb,"%s",buf);
~~~~~~^~~~~~~~~~~~~~~
xxx.cpp:352:15: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
fscanf(f_kb,"%s",buf);
~~~~~~^~~~~~~~~~~~~~~
350: while (fscanf(f1,"%s%d",buf,&x) == 2)
351: {
352: XXX;
353: }
int temp;
while ((temp = fscanf(f1,"%s%d",buf,&x)) == 2)
{
XXX;
}
背景:
复现github上C++语言的实验,应该不是(1)内存访问越界(2)堆栈溢出 等原因。解决的过程也很迷惑,按照博客的一些教程捣鼓了一下竟然不报错了,记录一下,供他人参考。
使用gdb来调试
首先安装gdb,终端执行命令:sudo apt-get install gdb
安装后终端输入 gdb 查看一下,最后输入 q 退出gdb。
输入命令:
ulimit -a
ulimit -c unlimited
第一行的core file size 由大小为 0 变成 unlimited。
4. 终端执行makefile,x是文件名,根据需要可自行命名
g++ -g x.cpp -o x
5.执行文件 ./x
./x
6.查看
gdb ./x core
7.在gdb模式下,输入where
(gdb)where
8.输入r ,执行
(gdb)r
9.输入q,退出gdb。
注:理论讲解请参考下面前三个链接。
参考链接:
Linux程序Segmentation fault (core dumped)
linux下运行c语言程序报Segmentation Fault错误原因总结即解决办法汇总
Segmentation fault (core dumped)
Linux下 跑Python模型报错 Segmentation fault (core dumped) 一种可能的解决办法