主要有以下几个方面的原因:
一、内存访问出错
这类问题的典型代表就是数组越界。
二、非法内存访问
出现这类问题主要是程序试图访问内核段内存而产生的错误。
三、栈溢出
Linux默认给一个进程分配的栈空间大小为8M。c++申请变量时,new操作申请的变量在堆中,其他变量一般在存储在栈中。
因此如果数组开的过大变会出现这种问题。
注意事项
段错误一般就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。
一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation fault就出现了。在编程中基本是是错误地使用指针引起的。
出现此问题的原因如下:
1、内存访问错误
这种问题的典型代表是数组越界。
2、非法内存访问
这种问题主要是由程序尝试访问内核段内存的错误引起的。
3、堆栈溢出
默认情况下,Linux为进程分配8M的堆栈空间。 当C ++申请变量时,新申请的变量在堆中,而其他变量通常存储在堆栈中。
因此,如果数组太大,则会出现此问题。
扩展资料:
段故障通常意味着访问的内存超出了系统为程序分配的内存空间。 通常,此值由gdtr存储,是一个48位寄存器,其轨道中的32位由其存储。
gdt表,后13位保存与gdt对应的下标,后3位包括程序是否在内存中以及cpu中程序的运行级别,gdt指向的表是一个以64位为单位的表。在此表中,代码段的信息和数据段的起始地址,相应的段限制和页交换,程序运行级别和内存粒度存储在该表中。
一旦对程序进行越界访问,CPU将生成相应的异构保护,并且将出现分段错误。 基本上,这是由于编程中不正确使用指针引起的。
本回答被网友采纳...核心已转储)”,ubuntu刚上手不大会用,谁说一下是啥问题_百度...
主要有以下几个方面的原因:一、内存访问出错 这类问题的典型代表就是数组越界。二、非法内存访问 出现这类问题主要是程序试图访问内核段内存而产生的错误。三、栈溢出 Linux默认给一个进程分配的栈空间大小为8M。c++申请变量时,new操作申请的变量在堆中,其他变量一般在存储在栈中。因此如果数组开的过...
linux下gcc 编程 段错误(核心已转储) 大神救我,折磨我一天了..._百度...
1. ulimit -c unlimited 2. 在用gcc编译时,在最后加上-g 3. 运行一次错误代码,出现段错误后, 目录中有一个core文件 4. 运行:gdb .\/a.out core 会自动帮你找出可能出错的代码,出现段错误一般都是越界了
Linux环境下提示段错误(核心已转储) 怎么回事?
可以利用printf打印语句,一步一步调试。
C语言 文件方面 段错误 核心已转储 以及字符串查找删除的问题
有几个问题:文件在读取了你的字符串后,文件指针位置已经到了该字符串后面,如果puts则会在字符串后面输出,比如:文件内容是aaaa\\nbbbb\\ncccc\\n,你读到bbbb行后,文件指针指向cccc\\n的首字符,如果puts的话会覆盖cccc\\n。按照设计目的,你应当让文件指针返回字符串bbbb\\n的首字符再输出。在输出了...
Linux下出现核心段错误。如下,我一将字符a赋值过去就出现核心段错误,已...
首先char *s;这个定义一个指针,而指针的含义是指向一个地址。char *s;这个定义,仅仅定义了一个指针,至于这个指针指向哪块地址没定义。所以系统可能默认给s随机赋值。s = 'a';这句话的含义是往指针s指向的内存存储字符a,而是指针s指向的内存都不知道是哪块,所以会出现段错误。
...核心已转储)”,ubuntu刚上手不大会用,谁说一下是啥问题_百度...
主要有以下几个方面的原因:一、内存访问出错 这类问题的典型代表就是数组越界。二、非法内存访问 出现这类问题主要是程序试图访问内核段内存而产生的错误。三、栈溢出 Linux默认给一个进程分配的栈空间大小为8M。c++申请变量时,new操作申请的变量在堆中,其他变量一般在存储在栈中。因此如果数组开的过...
LINUX下汇编出现 段错误(核心已转储)
回答:你先调下吧 gdb .\/hello core 看看那里错了