我在linux上有一个很长的程序,在主返回后给我分段错误。 它是一个很长的程序,所以我不能发表。 那么你能帮我什么可以做出这样的错误?
谢谢。
哇,这些答案真的很快。 谢谢你们。 我想我解决了,我忘了malloc一个string,并将其用作缓冲区。 现在我已经把它绑定了,它并没有给我一个分段错误的信号。
再一次,谢谢大家。
SSL API请求从今天起失败:“无法创buildSSL / TLS安全通道”
如何在windows 8.1上安装SDL并将其连接到Visual Studio Com@R_404_5845@y 2013
我如何强制SIGILL发送到我的程序?
使CreateProcess从一个string获得stdin
以root身份运行时以用户身份启动外部进程
如何在windows下的C / C ++中对两个Unicode字符或string进行大小写敏感比较?
C中的生命游戏,关于邻居
execv()和const-ness
用C#编写的windows IoT控制台应用程序?
如何build立C ++项目在exe文件中embedded所有的dynamic链接库?
猜测:你可能会意外地损坏了堆栈,所以它丢失了返回地址。 你有一个字符串缓冲区,你可能会超出?
如果没有,你应该尝试:
在valgrind下运行程序
用gdb调试程序来捕捉崩溃,看看你在哪里; 你也可以调试转储的核心文件
如果您的发行版包含glibc-deBUG包,可能会有所帮助,因为您将在此时使用glibc代码。
使用GDB并在SIGSEGV信号上打印堆栈跟踪。 那么至少在这里发布,这样我们可以更有帮助。
只要你编译:
$ gcc -g prog.c -o prog
然后在GDB下运行它:
$ gdb ./prog gdb> r
当您收到SIGSEGV信号(分段错误)时,请执行以下 *** 作:
gdb> bt
然后查看堆栈跟踪上的内容,查看导致分段错误的原因。
如果在main()返回后出现了分段错误,通常意味着全局定义的事情出错了。 这么少的信息很难帮你。 给我们更多的信息!
MY2C
如果是在main()返回之后,那么根据标准,所有的析构函数都已经运行了(尽管我不会把它放在一个实现中来模糊这个),除非已经使用了函数atexit() 。 该函数注册一个将在main()返回后被调用的函数,这是有效的(如果我正在读取3.6.3)。 如果只是为了完整性,你可能会检查你的程序是否存在一个不atexit的地方。
根据“主返回后”的含义,当程序崩溃时,您可能正在运行静态对象的析构函数。 检查这些。 (另外,发表你所观察到的让你认为是在main()返回之后,你可能会错的。)
如果没有,那么你在某处调用了未定义的行为,很可能以某种方式破坏了堆栈。 请参阅Rup的答案。
总结以上是内存溢出为你收集整理的主返回后的分段错误全部内容,希望文章能够帮你解决主返回后的分段错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)