c linux-return 0;出现段错误

问题描述

return 0;出现段错误

Linux平台,编写函数时发现return 0;出现段错误!!!

不知道是什么情况,开始以为函数体过大,定义变量过长(有的数组达到2048字节),自己也尝试修改过系统允许的堆栈最大值,但没用!

而后将函数分开,变成几个小函数,然后段错误就消失了!!!

问题虽然解决了,但是不知道问题的原因,希望懂得说明一下return 0;出现段错误是什么情况。

解决方案

听起来像是stack被你crash了,数组过大应该不是问题,2048自己的数字,你不会用静态数组吧?
但是没有代码,也只能猜猜了

解决方案二:

不可能是由于return 0导致的,问题的原因肯定在于你对数组之类局部变量的修改越界破坏了栈,导致栈里的返回地址错误,表现出来的情况就是return的时候程序跑飞了

解决方案三:

函数内部有数组越界等,造成函数的栈桢空间被破坏了

时间: 2024-07-28 16:57:48

c linux-return 0;出现段错误的相关文章

利用linux信号机制调试段错误(Segment fault)

在实际开发过程中,大家可能会遇到段错误的问题,虽然是个老问题,但是其带来的隐患是极大的,只要出现一次,程序立即崩溃中止.如果程序运行在PC中,segment fault的调试相对比较方便,因为可以通过串口.显示器可以查看消息,只要程序运行,通过GDB调试工具即可捕捉产生segment fault的具体原因.但是不知大家有没有想法,当程序运行在嵌入式设备上时,你所面临资源的缺乏,你没有串口打印信息,没有显示器可查看,你不知道程序运行的状态,如果程序的产生segment falut这种bug发生的周

Linux下调试段错误的方法[Segmentation Fault]--GDB

原文 1.段错误是什么? 段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况. A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the operation of computer software. In short, a segmentation

Linux环境下段错误的产生原因及调试方法小结

最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的"段错误"(Segmentation Fault).借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决. 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况.这里贴一个

Linux环境下段错误的产生原因及调试方法小结_C 语言

最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的"段错误"(Segmentation Fault).借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决. 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况.这里贴一个

linux c++ vector-linux vector clear报段错误

问题描述 linux vector clear报段错误 linux下写了一个程序,利用用到vector >inputData这样的数据结构,从oracle数据库表读取数据,读完之后,调用inputData.clear()清空容器,直接报段错误. gdb 调试,bt给出的信息是 std::vectorstd::vector<std::basic_string<char,std::char_traits<char,std::allocator >,std::allocatorst

嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类:   嵌入式(928)  一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的. 在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈.   [cpp] vie

Linux下的段错误产生的原因及调试方法

Linux下的段错误产生的原因及调试方法     简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以

oracle 9.2.0.8 exp导出dmp导入报Segmentation fault/段错误故障解决

在9.2.0.8 rac环境中,使用exp导出来dmp文件任何报错(按单个表,按用户导出,使用tns方式远程exp导出),包括重启数据库后导出,无法导入到其他数据库中(本库,tns方式远程导入,ftp传输到远程导入,9i/10g/11g版本)报错类似有setillegal instruction(coredump),段错误,Segmentation fault等,以下列出来几个报错信息--导入11.2.0.2版本 Import: Release 11.2.0.2.0 - Production o

linux/unix 段错误捕获【续】

本文为"在C/C++中捕获段错误,打印出错的具体位置"的续篇,进一步解决涉及动态链接库的情况.   背景知识: ·linux/unix下动态链接库的基本原理 ·/proc/pid/maps文件的基本格式 ·动态链接库:在进程执行过程中动态加载,进程间可以共享代码,可用在发布升级包等场合   概述:     用户自己编写的代码均编译进了可执行文件里的时候,"在C/C++中捕获段错误,打印出错的具体位置"里给出了在发生段错误(或其他错误,读者可以修改附件里面的头文件,增