看程序:
#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() 函数这一步,因此没有报错。
阅读(1365) | 评论(1) | 转发(0) |