这是一个初学者的问题,但我学习了使用c#编程,现在我正在使用C++,现在我正在使用指针,我知道当我完成它们之后,我必须从内存中释放它们,但是当程序是关闭的,他们是从内存中删除还是留在那里?是当C++程序结束时从内存中释放的指针?
回答
当程序结束时,它所使用的所有内存(不管是否动态分配)都会返回到操作系统。不管它是C程序,C++程序,C#程序还是其他类型的程序都可以。
现在,仅仅因为操作系统将回收内存并不意味着你可以成为内存管理的骑士。在你的程序运行时,你应该尽量保证释放你完成的任何内存。不这样做会导致“内存泄漏”,这些可能会影响程序及其运行的系统,至少在程序运行时会发生。
您分配的内存(例如使用New关键字)将保留在那里,除非您将其删除!如果你正在谈论指针本身,那么是的!在程序结束时,指针只会被擦掉!
谢谢!这意味着即使在程序关闭后,写入错误的代码也会导致计算机变慢。有没有freeall();方法还是类似于可以放在程序结尾处的方法? – AntoineLev
@Mostaguen,no。这个答案是错误的。你不需要像'freeall'或者anthing那样。当程序结束时,它的内存全部被操作系统回收。 –
@Mostaguen,在某些情况下最好忘记在最后释放大量这样的内存,因为它会在用户关闭应用程序后让应用程序挂在那里。为了避免内存泄漏,释放分配的内存是非常重要的,但是如果它只分配一次并且相当大,我宁愿应用程序关闭,操作系统照顾它,而不是坐在那里等待,而应用程序“什么也不做” 10秒“。 – chris
请注意,它不是需要释放的指针,而是指向的对象。
答案取决于的存储器类型的指针指向:
- 如果指针指向自动对象,则对象被隐式地清洁。
- 如果指针指向分配的对象动态使用
new
或new []
或malloc
或calloc
,那么他们就需要通过调用RESP或delete
或delete []
来free
显式释放。
请注意,建议谨慎使用动态分配,如果您必须,请使用智能指针而不是原始指针。
编辑:
如果你的问题是:如果你的程序不释放内存和出口
会发生什么?
答案是:
操作系统回收它。操作系统只是收回它分配给一个进程的所有内存,它不知道你的程序是否泄漏了内存。
但自己清理垃圾总是一个好习惯。
如果你有一个类的析构函数确实带有副作用代码,那么就不会在动态分配的指针上调用delete
导致未定义的行为,并且它会使你的代码完全摆脱编译器的怜悯。
除非他为指针分配内存。但他似乎一下子要问三四个问题。这个问题不明确。 – ShiggityShiggityShwa
我不认为这个问题是模棱两可的。它说:“当程序关闭时,它们会从内存中移除或停留在那里”,并且答案是当进程终止时,操作系统回收所有内存使用该进程。 –
你可以将他写的大部分内容短路,并留下他的答案,但在句子的前半部分和下半部分之间还有其他一些尚未解决的问题。这导致我相信他有其他问题,他没有直接问。他特别提出了关于指针的问题,这让我觉得这个问题很尴尬。 – ShiggityShiggityShwa
- 1. 当指针未知时,如何在C中释放内存?
- 2. 释放内存的指针结构
- 3. 从指针向量中释放内存
- 4. 指针释放和堆内存,C++
- 5. 从c中的内存中释放指针#
- 6. C++删除指向子类的指针时未释放内存
- 7. 释放内存时程序冻结
- 8. C - 释放指针指针
- 9. 是否删除[]释放指针分配的内存指针
- 10. 当释放内存中的内存时程序崩溃
- 11. 如何释放C中由两个指针指向的内存?
- 12. C语言:指针释放内存结构
- 13. 在另一个结构中释放指针内的指针
- 14. 释放一个结构指针还会释放C中结构内部分配的内存吗?
- 15. 是释放内存当PHP函数结束
- 16. 已释放指针的realloc内存?
- 17. 释放指针数组的内存?
- 18. C++:指向释放内存空间的指针
- 19. C - 释放指针数组是否也释放它们指向的内容?
- 20. 当我将它设置为NULL时,指针的内存是否已释放?
- 21. C++中指针变量的内存释放
- 22. 在程序结束之前不能释放内存有多糟?
- 23. 释放分配给指针的内存vs释放分配给指针指向的内存
- 24. 释放内存已递增指针
- 25. 释放内存为包含指针
- 26. 用指针算术释放内存
- 27. 当/如何释放指针从功能
- 28. 杀死并释放内存中永不结束的线程perl
- 29. 如何释放内存的结构,指针循环
- 30. 如何释放ACTUAL内存,而不仅仅是指向内存的指针?
+1。这正是发生的事情! –
我想知道是否有古怪的操作系统... –
@MatthieuM。如何Palm OS? :D –