段错误 (核心已转储) 原因与解决方法

今天我在Linux(Ubuntu )虚拟机下用c/c++编写程序实现拷贝一个文件的程序,结果在运行的时候,提示如下错误:

段错误 (核心已转储)

ubuntu@ubuntu-VirtualBox:/home$ sudo ./copy hello.c hello2.c

段错误 (核心已转储)

 

原因:

查了一下资料,加上自己的实践,有以下几个主要的原因:

 

1、内存访问出错

这类问题的典型代表就是数组越界。

 

2、非法内存访问

出现这类问题主要是程序试图访问内核段内存而产生的错误。

 

3、栈溢出

Linux默认给一个进程分配的栈空间大小为8M。c++申请变量时,new操作申请的变量在堆中,其他变量一般在存储在栈中。 因此如果你数组开的过大变会出现这种问题。

 

解决方法:

前两种问题的原因解决方法我就不多说了。我主要简单说下第3种“栈溢出”的解决方法,如下:

 

1、 首先,我们先看一下系统默认分配的资源:

ubuntu@ubuntu-VirtualBox:/home$ ulimit -a

ulimit -a

可以看到默认分配的栈大小为8M。

 

2、如果真的需要更大的栈空间,可以用指令“ulimit -s XXXX”来申请更大的栈空间。

 

现在再来谈一谈我是如何解决 “段错误 (核心已转储)”这个问题的?

其实解决问题很简单,由于我用的是普通用户,并没有用root用户,估计是权限的问题,不让我访问内存什么的。我只需要加上 sudo 再来执行就可以正常了,如下:

ubuntu@ubuntu-VirtualBox:/home$ sudo ./copy hello.c hello2.c

sudo ./copy hello.c hello2.c

    A+
发布日期:2021年12月23日 15:56:01  所属分类:c/c++
最后更新时间:2021-12-23 15:57:18
付杰
  • ¥ 198.0元
  • 市场价:298.0元
  • ¥ 1999.9元
  • 市场价:20000元
  • ¥ 98.0元
  • 市场价:198.0元
  • ¥ 498.0元
  • 市场价:998.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: