Chinaunix首页 | 论坛 | 博客
  • 博客访问: 784508
  • 博文数量: 161
  • 博客积分: 10005
  • 博客等级: 中将
  • 技术积分: 1445
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-04 15:08
文章分类

全部博文(161)

文章存档

2014年(1)

2013年(1)

2011年(2)

2010年(18)

2009年(26)

2008年(18)

2007年(66)

2006年(29)

我的朋友

分类: C/C++

2006-12-12 16:13:49

看程序:
#include
#include
 
int main()
{
        //char test[10][10];
 
        //printf("%d",sizeof(test));
        char test[10];
 
        memset(test,0,100);
 
        //return 0;
        exit(0);
}
此程序执行时如果是return则会出现段错误(地址错误),而exit则不会出现此错误。
简单的说exit(0)是系统调用,表示程序结束;而return只是从main中返回到调用它的函数中.从细里分析则发现问题在于他们两个的小的区别。程序中memset() 范围写错破坏了 main() 函数的堆栈,return 无法返回调用 main() 的那个函数(我估计是返回到了 0 地址),所以出现段错误。而直接调用 exit() 不会有退出 main() 函数这一步,因此没有报错。
阅读(1329) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~