main函数返回收到segmentation fault

ericming200409 2011-09-13 03:19:35
我的程序大概如下:

int main()
{
// funcitons called
fprintf(stderr, "run to end of main\n");

return 0;
}


程序在打印run to end of main 后, segmentation fault.
请问大侠这是什么概念,在最后返回的时候出现这样的错误一般是什么原因造成的。
...全文
408 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
braveyly 2011-09-13
  • 打赏
  • 举报
回复
是否 stderr 文件句柄, 已经被close了?

fprintf(stderr, "run to end of main\n");
改成
sprintf(stderr, "run to end of main\n");
会发生阻塞!


vargrind是个好工具!

freetstar 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zmlovelx 的回复:]

这种情况一般都是越界.
也可以使用一些静态检测工具, cppcheck等试着查找下.

动态检测方面可以用valgrind
[/Quote]
学习,久闻valgrind大名

帅得不敢出门 2011-09-13
  • 打赏
  • 举报
回复
这种情况一般都是越界.
也可以使用一些静态检测工具, cppcheck等试着查找下.

动态检测方面可以用valgrind

谭海燕 2011-09-13
  • 打赏
  • 举报
回复
问题解决了??
cqbamboo 2011-09-13
  • 打赏
  • 举报
回复
原来如此!
ericming200409 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]

main函数里哪越界了,改变了main的返回地址。
某些全局变量的析够或一些退出时执行的函数出了问题

就lz贴的代码,应该没问题呀。
[/Quote]
我的这段代码肯定是没问题的, 因为代码量巨大,所以,没有贴出来。我首先想到的是前面一直都没报错,后来返回报错,那肯定是哪里发生越界访问了。

经过我自己检查,果然如此,我的memset操作不小心操作了比预期更大的内存,可能是修改了main函数返回需要处理的数据,从而导致segmentation fault
luciferisnotsatan 2011-09-13
  • 打赏
  • 举报
回复
main函数里哪越界了,改变了main的返回地址。
某些全局变量的析够或一些退出时执行的函数出了问题

就lz贴的代码,应该没问题呀。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧