在linux下变成有时会出现这样的情况,编译时没有error,但是执行时会出现Segmentation fault (core dumped)
core dumped就是核心转储,进程异常终止,进程用户空间的数据就会被写到磁盘。但是linux下一般不会产生core文件
需要用到gdb调试工具:
1、首先使用ulimit -a查看你的core file size是否为0.如果不是的话就请跳到步骤3, 如果是的话,请接着看下面的步骤。
2、然后使用ulimit -c 1024命令修改core file size。这里我们暂且把修改为1024吧。
不放心的话可以再使用ulimit -a查看core file size
3、下面再次运行程序让其错误信息存储于core file并使用ll查看core file信息以便于使用gdb。
4、接下来我们使用gdb调试工具查看错误原因,使用命令gdb core-file core定位error(关于这一句命令,先使用ll命令查看是因为要知道你的core file名称才好使用gdb调试)。可以看到我的c++代码error应该是Program terminated with signal SIGSEGV, Segmentation fault.
可能原因
1.内存访问越界
a) 由于使用错误的下标,导致数组访问越界
b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符
c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, s