望指点出错处理exit()和return的选择。
在一些单进程的实际应用程序开发中,exit函数用于处理哪些类型的错误?毕竟,对于单进程额很多程序来说,不需要一出错就把程序给over了,大部分程序的错误处理应该能用return+不同的返回值来处理吧。在用malloc分配空间时,分配失败时,用exit(OVERFLOW)好,还是用return OVERFLOW好,为什么?注:#define OVERFLOW -2。
[解决办法]
具体情况具体分析。
如果出错后,程序能继续处理其他业务,就用return;如果出错后,程序一无是处,什么也处理不了,就用exit。
举例:
你写了两个程序,这两个程序都是分析文件用的。第一个程序的做法是把整个文件加载进内存,然后分析;第二个程序有两种方法,第一种方法是与第一个程序一样,也是把整个文件加载进内存,这样分析起来快;第二种方法是只加载程序一小部分,分析完加载的这部分,再逐一加载剩下的部分进行分析。
如果一个文件有1G,那么第一个程序很可能malloc失败,很明显,这时程序应该exit,因为除此之外,这个程序什么也干不了。第二个程序的第一种方法也可能malloc失败,但是,只需return即可,因为用户还可选择用第二种方法进行分析,只是速度慢一些。
[解决办法]
malloc失败说明操作系统内存管理模块此时已经不能分配内存本进程了,本进程再继续运行下去肯定凶多吉少,还是及早退出释放所有本进程占用的所有内存还操作系统,以便操作系统能用其干点更重要的事(比如保护现场,写Dump文件等)。
[解决办法]
试试改为,看看区别。
int foo()
{
//return -2;
exit(-2);
}
还是return吧,尽可能的做善后工作。
#include <stdlib.h>
#include <stdio.h>
int foo()
{
return -2;
//exit(-2);
}
int main()
{
void* p = malloc(100);
puts("in progress");
foo();
free(p);
puts("all done");
return 0;
}
谢谢朋友,不过我不懂这里的foo()有什么用?它只是返回了一个-2给main,而且main也没使用这个值。在main函数里调用return会自动调用exit来处理一些后续的事情。所以main里使用return跟exit基本一样。但这里的foo(),我不懂是用来做什么?你上面注释了//exit(-2)但,不是要在main里使用return才相当于exit的嘛。