在C++中,用new申请了指针指向某内存却不用delete销毁,直到整个应用程序结束,会发生什么后果?试详述原

希望能说说操作系统是如何对这一问题反应的?

会导致内存泄露。
操作系统管理内存,是有一个资源队列的,用new申请一块内存时,从可用资源中取一块可用资源分配给应用程序。如果没有用delete归还系统,这块内存就不会返回资源队列,无法再分配给其他应用程序。
就好像你从图书馆借书,结果看完后你自己把书放回书库,没有在图书管理系统中体现出来这本书已经返回书库。别的人来查询借书时就找不到这本书。这种情况多了,就会出现本来书库满满的,但再也借不到书。
内存泄露也这样,明明还有很多内存,但程序编写不严谨,造成大量内存丢失。直到重启系统。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-05
申请了内存但是不用delete销毁,在程序运行期间内存一直被使用,操作系统认为这段内存属于该程序,不会将这段内存分给别的程序使用,如果使用delete之后,操作系统就获得了这段内存的使用权,可以将其分给别的程序或者线程。但是该程序结束时,操作系统将会收回该程序占用的所有资源,包括CPU资源,内存资源,显存资源。所以说,程序结束之后操作系统会把没有delete的内存区域释放出来给其他程序使用。但是为什么一定要在程序内部释放(delete)内存呢,是因为如果不释放的话,该段内存一直处于被使用的状态,操作系统无法将它分配出去,如果这种情况聚集起来会使得内存崩溃的,或者是说内存泄漏:该内存被占用,但是实际上什么事情也没有做。
第2个回答  推荐于2016-08-18
这个要分情况讨论:
1。在一般情况下,若你写的程序是应用程序,那么如果不用delete销毁,操作系统会帮你销毁……因为每一个程序都有一个4GB虚拟内存,程序关闭后会自动解除这个程序所有用过的对象…
2。在内核情况下,也就是说你的程序是驱动程序,调用的是native API的话,不delete却关闭了程序,那么这块内存必须等到重新启动后才能释放,系统是不会自动释放它的…
其实一般你只要知道1。就行了,如果想知道更多的内容,就先看一下IntelCPU的保护模式,弄清楚操作系统多线程的原理,然后再参考一些驱动开发的书籍,或者rootkit获取ring0级权限程序的原代码(比如CIH)等……本回答被提问者采纳

在C++中,用new申请了指针指向某内存却不用delete销毁,直到整个应用程序...
会导致内存泄露。操作系统管理内存,是有一个资源队列的,用new申请一块内存时,从可用资源中取一块可用资源分配给应用程序。如果没有用delete归还系统,这块内存就不会返回资源队列,无法再分配给其他应用程序。就好像你从图书馆借书,结果看完后你自己把书放回书库,没有在图书管理系统中体现出来这本书...

c++编程中,用new动态分配内存后,不使用delete,被分配的内存会永远丢失吗...
在C++中可以用new和malloc在堆上申请空间,并且必选相应地用delete和free进行释放空间,因为在C++编译器中,堆这部分存储空间是完全由程序员自己管理的,即由程序员自己分配和释放。如果在程序中用new和malloc申请了空间的话,但是在程序中没有手动用delete和free释放空间的话,在程序执行过程中以及程序执行...

C++中用new开辟了空间,忘记用delete了,造成的内存泄露该怎么解决(越...
如果不多的话无所谓,实际上不会有啥影响,随着程序的退出该空间会自动释放。如果程序不停的申请内存空间而又不释放的话,很有可能造成程序异常退出或者将内存消耗完毕。

c++中用new分配的内存不delete的话,程序结束后,内存会否丢失?
如果你程序退出的话,肯定是要还给系统的;如果你说的有后台运行的意思,内存是不会释放的.

C++中new出来的对象,不delete的话,会怎么样?
main函数执行完,函数退出,进程结束,所有进程占用的内存都会被释放,包括泄露的内存。C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。其编程领域众广,常用于系统开发,引擎开发等应用领域...

C++中new之后的内容一定要delete吗?
恩,new分配的内存在堆上,必须程序员自己用delete,而局部变量和函数参数分配的内存在堆栈上,自动释放,由系统完成。在堆上分配的内存不用delete释放,就是我们常说的内存泄漏。

在C++中,用new动态申请的内存空间,是否必须用delete来释放?
可以不释放,但是会耗掉内存,要释放就只能用delete

C++ 中关于new和delete使用的一些疑问
也就是说如果你的程序中常常new一些内存而不delete,你的程序占用的内存会不断增大。但是有一些全局数据,可以new了不delete,在程序开始运行时,创建这些数据,程序运行过程中使用这些数据,直到程序结束。A3.写法错误。 如果new一个数组,必须使用delete[]符号。A4.现代操作系统,程序结束后,会收回这个...

C++ delete 类对象引用 不能正确运行
new和delete是成对出现的,没有new,就不要delete。new是申请内存空间给一个指针,申请后如果不delete,那部分内存就一直占着,直到重启机器。对于非指针变量,内存自动分配,用完后自动释放,不要你关心的。总之记住,一个new对应一个delete,就好比括号一样,没有对应的左括号,这个右括号不就是错误了...

C++中有new就必须要有delete吗?
指针a指向这块内存起点,然后你可能用a来做些事情,加减乘除啊什么的,当你用完它,并且以后再也用不到的时候,你必须delete掉它,因为函数离开后,你找不到a指针了,你永远也没法用这块内存了,这4个字节的内存被永远占着,系统一直觉得你还要用到这块内存,...

相似回答