Linux下运行C++程序出现"段错误(核心已转储)"的原因

   今天写程序出现了“段错误(核心已转储)"的问题,查了一下资料,加上自己的实践,总结了以下几个方面的原因。

  1.内存访问出错

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

  2.非法内存访问

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

  3.栈溢出

    Linux默认给一个进程分配的栈空间大小为8M。c++申请变量时,new操作申请的变量在堆中,其他变量一般在存储在栈中。

    因此如果你数组开的过大变会出现这种问题。

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

  

  1 ulimit -a

   

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

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

时间: 2024-11-04 09:46:52

Linux下运行C++程序出现"段错误(核心已转储)"的原因的相关文章

段错误 核心已转储尝试解决

1.在进行 gdb python r XX.py where 调试时,报出以下错误: 1)每次运行都开38个线程,是否是线程超载[New Thread 0x7ffff2fd2700 (LWP 7415)] [New Thread 0x7ffff27d1700 (LWP 7416)] [New Thread 0x7fffeffd0700 (LWP 7417)] [New Thread 0x7fffeb7cf700 (LWP 7418)] [New Thread 0x7fffe8fce700 (LW

linux下转格式函数iconv段错误

今天将windows代码移植到Linux下,其中用到了Unicode转char的函数,被坑了一会,相关函数及编码格式,Linux与windows不同,有几点需要注意: 1.wchar_t 在Linux下占用4个字节,在windows下占2个字节: 2.Linux默认的文本编码方式是UTF-8:Linux终端汉字显示的设置方式:vi /etc/sysconfig/i18n: 设置LANG="en_US.UTF-8"或者LANG="zh_CN.UTF-8": 3.ico

终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误

http://blog.csdn.net/zklth/article/details/7184032 Linux下 和 Windows 下 Oracle Instant Client 的安装. http://fableking.iteye.com/blog/2115724 http://download.csdn.net/download/fjnocliuzm/8512501 http://www.jb51.net/article/59646.htm http://blog.csdn.net/g

【linux】linux下运行java程序

参考了http://www.cnblogs.com/howard-queen/archive/2012/01/30/2331795.html 第一步:用vim先写一个java程序  first.java  就写在jdk的bin目录下 public class first{ public static void main(String args[]){ System.out.println("This is my first program."); } } 第二步:./javac /us

今天在Linux下运行一个程序遇到的问题

我运行一个使用PF_RING+DNA进行捕包的程序,结果在程序运行结束后,我发现我退出不了DNA模式了! 以前都是进入驱动PF_RING-aware中安装对应驱动就可以了,但是这里一直显示pfring in use 和ixgbe.ko in use ,那么,我该怎么办呢? 前段时间总是重启了事,但是今天试着解决之下竟然真的解决了! 用top查看发现一个我的程序占用了98%以上的CPU,正在运行...用kill 19432根本杀死不了这个进程,所以... 最后用kill -9 19432强行杀死这

段错误(核心已转储)的原因

一.什么是段错误? 一旦一个程序发生了越界访问,cpu 就会产生相应的保护,于是 segmentation fault 就出现了,通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的,还有可能是缺少文件或者文件损坏. 二.段错误产生的原因 下面是一些典型的段错误的原因: 非关联化空指针--这是特殊情况由内存管理硬件 试图访问一个不存在的内存地址(在进程的地址空间) 试图访问内存的程序没有权利(如内核结构流程上下文) 试图写入只读存储器(如代码段) 1

linux下C编程free()时出现飘忽诡异的段错误(核心已转储)问题

先说一下问题现场. 代码如下 free(volthisframe->Tops); free(volthisframe->Bots); printf("what\n"); free(volthisframe->SCTops); free(volthisframe->SCBots); 运行时出现段错误,"what"随机出现,也就是说可能是打印前出现段错误,也可能是打印后出现段错误.但最终定位就在这几行free里面. 人格保证,各个指针都有初始化,

windows下编写的Shell脚本在Linux下运行错误的解决方法

出现这种错误的原因:CR/LF问题,在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令. 两种解决方法: 1.将格式转换为UNIX,“编辑->格式转换(CR/LF)->UNIX”,这样Linux下就能按unix的格式保存文件 2.在vim中,输入:set ff=unix,然后:wq,同样也是转换成unix的格式 cat

Demo+在Linux下运行(CentOS7+dotnetcore sdk)

来份ASP.NET Core尝尝 0x01.前言 学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是 略懂一二.如果有错误,还望见谅. 本文还是和之前一样,Demo+在Linux下运行(CentOS7+dotnetcore sdk) 开发环境:win10+vs2015+sqlserver2014 0x02.demo 新建一个ASP.NET Core Web Application项目--Catcher.EasyDemo.Website 干掉Co