使用Ctrl-C中断程序时如何释放动态分配的空间?

给出以下代码:

#include  int main() { int *p; p = (int *)malloc(10 * sizeof(int)); while(1); return 0; } 

当编译并运行上面的代码,并且在执行时按Ctrl + C中断代码时,如何释放分配给p的内存? 这里的操作系统有什么作用? 它与C ++的情况有什么不同,使用new运算符?

当进程终止时,操作系统将回收进程正在使用的所有内存。

即使操作系统收回你的应用程序在终止时使用的内存,人们也会因为内存泄漏而造成重大损失的原因是,通常非平凡的应用程序会长时间运行,慢慢吞噬系统上的所有内存。 对于寿命很短的程序来说,这不是一个问题。 (但你永远无法分辨一个单行程何时会成为一个巨大的程序,所以即使在小程序中也不会有任何内存泄漏。)

顺便说一句(除了Seth Carnegie说):

使用的例程,您可以捕获SIGINT信号(中断)以任何方式处理Ctrl + C ,例如清理任何重要资源,而不仅仅是内存(如关闭文件,从而避免丢失任何缓冲和尚未写入的内容,或轻轻关闭网络连接)。

_exit的完整解释如下:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html

当一个过程由于致命信号而终止时,会发生同样的事情。

内存实际上根本不是“free()”d。

操作系统获取的内存是页面大小(通常是4k字节的内存)。 每当进程耗尽内存时,它就会获取额外的页面,这些是malloc()实际使用的空间。 当进程终止时,所有页面都返回到操作系统,使得实际上不需要调用。 如果你的程序是一个服务器或类似的程序,那么永远不会被释放的每一块内存只会在程序被实际杀死时返回 – 这使得每个内存都更加耗费内存。