`

C++中的return、exit与abort

阅读更多

原文地址:http://blog.csdn.net/tangboyun/archive/2010/02/04/5288799.aspx

 

exit():

在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。

会进行的清理工作包括:销毁所有static和global对象,清空所有缓冲区,关闭所有I/O通道。终止前会调用经由atexit()登录的函数,atexit如果抛出异常,则调用terminate()。

abort():

调用时,不进行任何清理工作。直接终止程序。

retrun:

调用时,进行stack unwinding,调用局部对象析构函数,清理局部对象。如果在main中,则之后再交由系统调用exit()。

示例:

转自:gnu.gcc.help讨论组

 

 

抄袭来源:http://dev.firnow.com/course/6_system/linux/Linuxjs/20100326/201419.html

return返回,可析构
main或函数中的局部变量,尤其要注意局部对象,如不析构可能造成
内存泄露。exit返回不析构main或函数中的局部变量,但执行收工函数,
故可析构全局变量(对象)。abort不析构main或函数中的局部变量,也不
执行收工函数,故全局和局部对象都不析构。
    所以,用return更能避免内存泄露,在C++中用abort和exit都不是好
习惯。

 

 

http://hi.baidu.com/ilotus_y/blog/item/2e1a6339d00e0bf43a87cebb.html

分享到:
评论

相关推荐

    C++ 中exit(),_exit(),return,abort()函数的区别

    exit()函数与_exit()函数及return关键字的区别:  exit()和_exit()函数都可以用于结束进程,不过_exit()调用之后会立即进入内核,而exit()函数会先执行一些清理之后才会进入内核,比如调用各种终止处理程序,关闭...

    cpp-returntoabort使用代码内省来防止堆栈崩溃

    6. **测试与验证**:为了确保`return-to-abort`策略有效且不会引入新的问题,需要进行充分的测试,包括单元测试、集成测试以及压力测试,确保在各种情况下程序都能正确地响应堆栈溢出。 值得注意的是,`return-to-...

    Visual C/C++的异常处理

    在这个例子中,`exit(EXIT_SUCCESS)` 表示程序正常结束,而 `exit(EXIT_FAILURE)` 表示程序出现错误并需要终止。 **注册退出处理函数** 除了 `exit()` 和 `abort()`,还可以使用 `atexit()` 函数来注册退出处理函数...

    C++编程思想(中文)\09

    ### C++编程思想:命名控制与静态成员 在C++编程中,命名控制是一个至关重要的概念,尤其是在处理大型项目时,有效地管理名字空间可以避免命名冲突,提高代码的可读性和可维护性。C++提供了多种机制来控制名字的...

    Turbo_C_2.0、Borland_C++库函数及用例

    以上这些函数都是在早期的 Turbo C/C++ 和 Borland C++ 编译环境中常用的函数,它们为程序员提供了直接操作系统底层资源的能力,比如文件系统的读写、内存分配等。这些函数对于了解低级别的系统编程是非常有帮助的。

    Turbo C 2.0、Borland C++库函数及用例!

    ### Turbo C 2.0 和 Borland C++ 库函数...以上就是关于 Turbo C 2.0 和 Borland C++ 库函数中以字母 A 开头的几个函数的详细介绍和示例。这些函数在编写低级系统程序时非常有用,特别是在处理文件系统和内存管理方面。

    Turbo C 2.0、Borland C++库函数及用例

    在IT领域,特别是编程语言与开发工具的历史进程中,Turbo C 2.0 和 Borland C++ 是两个具有里程碑意义的软件。它们不仅为程序员提供了强大的编译环境,还引入了丰富的库函数,极大地简化了软件开发过程。下面将详细...

    -C++参考大全(第四版) (2010 年度畅销榜

    20.1 老的C++I/O与现代的C++I/O 20.2 C++的流 20.3 C++的流类 20.4格式化的I/O 20.5 重载 第21章 C++文件的输入/输出 21.1 和文件类 21.2 打开和关闭文件 21.3 读写文本文件 21.4 无格式和二进制I/O 21.5 其他get()...

    Turbo_C_2.0、Borland_C++库函数及用例.txt

    根据提供的文件信息,我们可以归纳出一系列与Turbo C 2.0 和 Borland C++ 相关的重要知识点,包括各种库函数及其用法。以下是对这些知识点的详细解析: ### 1. `abort` 函数 #### 功能: 用于终止程序的执行。 ####...

    了解C++编程中指定的异常和未经处理的异常

    在C++编程中,异常处理是一项关键的错误处理机制,它允许程序员在程序遇到预期之外的问题时优雅地恢复或关闭程序。本文将深入探讨指定异常(即noexcept关键字)和未经处理的异常,以及它们在C++11及更高版本中的应用...

    C++ 基本知识--异常(吴军).pptx

    三是异常处理机制,包括`abort()`、`exit()`和使用`try-catch`结构。 异常的实现机制主要包括以下几点: 1. 异常对象:异常是通过抛出对象来引发的。这些对象根据类型来决定激活哪个处理代码。当异常被抛出后,...

    C++ 内存分配处理函数set_new_handler的使用

    3. 终止程序,如调用`std::abort`或`std::exit`。 如果`new_p`是空指针,处理函数会被重置为默认行为,即抛出`std::bad_alloc`异常。 ### 四、函数返回值 `set_new_handler`函数返回之前设置的处理函数指针。如果...

    hanshujiqigongneng

    `abort()` 是C标准库中的一个函数,它的主要功能是异常终止当前正在执行的进程。当你调用 `abort()` 函数时,程序会立即停止执行,不执行任何清理工作,也不返回到调用点。通常,这在程序遇到无法恢复的错误或异常...

    C语言函数大全C语言所有函数的解释和示例

    在调用 `abort()` 后,程序将不会执行后续的代码,包括 `return` 语句。 示例: ```c #include #include int main() { printf("Calling abort()\n"); abort(); return 0; /* This is never reached */ } ...

    C 语言编程常见问题解答.chm

    8.9 exit()和return有什么不同? . 第9章 数组 9.1 数组的下标总是从0开始吗? 9.2 可以使用数组后面第—个元素的地址吗? 9.3 为什么要小心对待位于数组后面的那些元素的地址呢? 9.4 在把数组作为...

Global site tag (gtag.js) - Google Analytics