segmentation fault (core dumped)

概述

Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题的最好办法则是调试。

  • 由于使用错误的下标,导致数组访问越界
  • 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界

调试技巧ulimit

  1. 先使用ulimit -c查看下默认的core生成文件大小限制。
    core file size 就表示core文件的大小是0字节,所以,是默认不产生core文件的。

  2. 如果太小就修改下:ulimit -c 1024
    -c之后的数字就是修改core大小的。

  3. 这个时候在将程序编译一下,编译后运行。则会生成core.xxxx文件,xxxx是程序运行的pid

  4. gdb core-file core.xxx进行调试,则可以定位问题。

ulimit使用指南


ULIMIT(3)                                           Linux Programmer's Manual                                           ULIMIT(3)

NAME
       ulimit - get and set user limits

SYNOPSIS
       #include <ulimit.h>

       long ulimit(int cmd, long newlimit);

DESCRIPTION
       Warning:  this  routine  is  obsolete.   Use  getrlimit(2),  setrlimit(2),  and sysconf(3) instead.  For the shell command
       ulimit(), see bash(1).

       The ulimit() call will get or set some limit for the calling process.  The cmd argument can have one of the following val‐
       ues.

       UL_GETFSIZE
              Return the limit on the size of a file, in units of 512 bytes.

       UL_SETFSIZE
              Set the limit on the size of a file.

       3      (Not implemented for Linux.)  Return the maximum possible address of the data segment.

       4      (Implemented  but  no symbolic constant provided.)  Return the maximum number of files that the calling process can
              open.

RETURN VALUE
       On success, ulimit() returns a nonnegative value.  On error, -1 is returned, and errno is set appropriately.

ERRORS
       EPERM  An unprivileged process tried to increase a limit.

ATTRIBUTES
       For an explanation of the terms used in this section, see attributes(7).

       ┌──────────┬───────────────┬─────────┐
       │Interface │ Attribute     │ Value   │
       ├──────────┼───────────────┼─────────┤
       │ulimit()  │ Thread safety │ MT-Safe │
       └──────────┴───────────────┴─────────┘

CONFORMING TO
       SVr4, POSIX.1-2001.  POSIX.1-2008 marks ulimit() as obsolete.

SEE ALSO
       bash(1), getrlimit(2), setrlimit(2), sysconf(3)

COLOPHON
       This page is part of release 4.15 of the Linux man-pages project.  A description of the project, information about report‐
       ing bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.

Linux                                                       2017-09-15                                                  ULIMIT(3)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早睡的叶子

你的鼓励就是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值