另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
16 个解决方案
#1
在链表中通过malloc(new)动态分配的内存(在create和insert操作中)没有被free(delete)光(在delete操作中),那么这部分内存,系统会不会自动回收?
不会。
另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
好像也不会吧。
不会。
另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
好像也不会吧。
#2
1.不会。
2.不会。(是题目不会)
2.不会。(是题目不会)
#3
要是系统会自动回收,就不用担心内存泄漏的问题了~~可惜操作系统没这么聪明,所以还是事事小心的说!
#4
又不是java,所以没有垃圾回收机制,这是经过长时间的权衡利弊,做出的决定,详细情况请见 c++ D&E
#5
我不是这个意思。
我们都编过链表之类的程序,所以我想问的是我们通过create和insert函数插入了许多的数据,可是总不至于在delete中把那些数据统统delete光把,总会剩下一些数据。我说的是剩下的那部分数据的内存!!
我们都编过链表之类的程序,所以我想问的是我们通过create和insert函数插入了许多的数据,可是总不至于在delete中把那些数据统统delete光把,总会剩下一些数据。我说的是剩下的那部分数据的内存!!
#6
如果你自己不处理,不要指望系统会帮你擦屁股:)
#7
当然要delete光,有多少new就有多少delete,不是new的不用delete。
#8
只要是new出来的,都把它delete光光。剩下的数据就是栈里的,管他作甚。
#9
link *p,*q;
{
...
...
}
while(p->next!=NULL)
{
q=p->next;
delete p;
}
delete q;
这样应该可以了。
{
...
...
}
while(p->next!=NULL)
{
q=p->next;
delete p;
}
delete q;
这样应该可以了。
#10
这样是不会自动delete的
你可以设计类把delete设计在
析构函数
可以自动调用 不过你点设计好
不然也会 造成内存泄漏的
你可以设计类把delete设计在
析构函数
可以自动调用 不过你点设计好
不然也会 造成内存泄漏的
#11
1. 在链表中通过malloc(new)动态分配的内存(在create和insert操作中)没有被free(delete)光(在delete操作中),那么这部分内存,系统会不会自动回收?
【答】
不会。
你必须清楚一点:C 是非“自动化”的语言,不像 JAVA,DELPHI 可以自动替程序员完成许多工作,C 程序的命运可以用“事必躬亲”来形容,C++ 只比 C 略好那么一点而已
你亲自分配的内存,就必须自己亲自释放
就好比电影里常有的,你把女方肚子弄大了,就应该为后果负责……
2. 另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
【答】
可能不会。
不同的系统有不同的资源管理方案(STL 是独立于 OS 的)
所谓程序的“异常”结束,也有各种不同的具体情况:
1. 野蛮的“异常”退出,一条跳转语句,直接跳到程序的出口处
2. 文明的“异常”退出,系统会自动替被强制结束的进程释放资源,当然也包括 vector 的内存
但是,作为一个正常的程序,你不能指望系统替你做你应该做的事,那些措施的作用只是以防万一
【答】
不会。
你必须清楚一点:C 是非“自动化”的语言,不像 JAVA,DELPHI 可以自动替程序员完成许多工作,C 程序的命运可以用“事必躬亲”来形容,C++ 只比 C 略好那么一点而已
你亲自分配的内存,就必须自己亲自释放
就好比电影里常有的,你把女方肚子弄大了,就应该为后果负责……
2. 另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
【答】
可能不会。
不同的系统有不同的资源管理方案(STL 是独立于 OS 的)
所谓程序的“异常”结束,也有各种不同的具体情况:
1. 野蛮的“异常”退出,一条跳转语句,直接跳到程序的出口处
2. 文明的“异常”退出,系统会自动替被强制结束的进程释放资源,当然也包括 vector 的内存
但是,作为一个正常的程序,你不能指望系统替你做你应该做的事,那些措施的作用只是以防万一
#12
http://www.c-view.org/journal/001/001.htm
请看第一期《c-view》上面的smart pointer.
请看第一期《c-view》上面的smart pointer.
#13
哇,经过一番推敲,我也基本上明白了。
呵呵,灯会结帐!!
呵呵,灯会结帐!!
#14
new和delete是孖生的,一定要一一对应,要不是问题多多.
#15
如果你只是通过new 或malloc创建的内存,那么你的进程退出后,系统会自动回收。所谓的内存泄漏是指你的程序没有退出,你malloc或new的内存不用时不去释放造成系统内存浪费
#16
老猫的话是正确.
只要你的进程最后是退出了,就不存在内存泄漏了.OS会把你的内存资源全部回收的.
但对一个需要长时间运行或是无限期运行的程序来说,new/delete配对就十分重要了.否则程序要宕的.
同时,我认为new/delete配对是书写良好程序的规范,尽量遵守的好!
只要你的进程最后是退出了,就不存在内存泄漏了.OS会把你的内存资源全部回收的.
但对一个需要长时间运行或是无限期运行的程序来说,new/delete配对就十分重要了.否则程序要宕的.
同时,我认为new/delete配对是书写良好程序的规范,尽量遵守的好!
#1
在链表中通过malloc(new)动态分配的内存(在create和insert操作中)没有被free(delete)光(在delete操作中),那么这部分内存,系统会不会自动回收?
不会。
另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
好像也不会吧。
不会。
另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
好像也不会吧。
#2
1.不会。
2.不会。(是题目不会)
2.不会。(是题目不会)
#3
要是系统会自动回收,就不用担心内存泄漏的问题了~~可惜操作系统没这么聪明,所以还是事事小心的说!
#4
又不是java,所以没有垃圾回收机制,这是经过长时间的权衡利弊,做出的决定,详细情况请见 c++ D&E
#5
我不是这个意思。
我们都编过链表之类的程序,所以我想问的是我们通过create和insert函数插入了许多的数据,可是总不至于在delete中把那些数据统统delete光把,总会剩下一些数据。我说的是剩下的那部分数据的内存!!
我们都编过链表之类的程序,所以我想问的是我们通过create和insert函数插入了许多的数据,可是总不至于在delete中把那些数据统统delete光把,总会剩下一些数据。我说的是剩下的那部分数据的内存!!
#6
如果你自己不处理,不要指望系统会帮你擦屁股:)
#7
当然要delete光,有多少new就有多少delete,不是new的不用delete。
#8
只要是new出来的,都把它delete光光。剩下的数据就是栈里的,管他作甚。
#9
link *p,*q;
{
...
...
}
while(p->next!=NULL)
{
q=p->next;
delete p;
}
delete q;
这样应该可以了。
{
...
...
}
while(p->next!=NULL)
{
q=p->next;
delete p;
}
delete q;
这样应该可以了。
#10
这样是不会自动delete的
你可以设计类把delete设计在
析构函数
可以自动调用 不过你点设计好
不然也会 造成内存泄漏的
你可以设计类把delete设计在
析构函数
可以自动调用 不过你点设计好
不然也会 造成内存泄漏的
#11
1. 在链表中通过malloc(new)动态分配的内存(在create和insert操作中)没有被free(delete)光(在delete操作中),那么这部分内存,系统会不会自动回收?
【答】
不会。
你必须清楚一点:C 是非“自动化”的语言,不像 JAVA,DELPHI 可以自动替程序员完成许多工作,C 程序的命运可以用“事必躬亲”来形容,C++ 只比 C 略好那么一点而已
你亲自分配的内存,就必须自己亲自释放
就好比电影里常有的,你把女方肚子弄大了,就应该为后果负责……
2. 另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
【答】
可能不会。
不同的系统有不同的资源管理方案(STL 是独立于 OS 的)
所谓程序的“异常”结束,也有各种不同的具体情况:
1. 野蛮的“异常”退出,一条跳转语句,直接跳到程序的出口处
2. 文明的“异常”退出,系统会自动替被强制结束的进程释放资源,当然也包括 vector 的内存
但是,作为一个正常的程序,你不能指望系统替你做你应该做的事,那些措施的作用只是以防万一
【答】
不会。
你必须清楚一点:C 是非“自动化”的语言,不像 JAVA,DELPHI 可以自动替程序员完成许多工作,C 程序的命运可以用“事必躬亲”来形容,C++ 只比 C 略好那么一点而已
你亲自分配的内存,就必须自己亲自释放
就好比电影里常有的,你把女方肚子弄大了,就应该为后果负责……
2. 另外用vector容器,当程序异常退出,那么由于vector没能调用他的祈构函数(同理与其他因异常退出而没能调用祈构函数来释放动态分配的内存),分配在vector中的内存,系统会不会自动回收??
【答】
可能不会。
不同的系统有不同的资源管理方案(STL 是独立于 OS 的)
所谓程序的“异常”结束,也有各种不同的具体情况:
1. 野蛮的“异常”退出,一条跳转语句,直接跳到程序的出口处
2. 文明的“异常”退出,系统会自动替被强制结束的进程释放资源,当然也包括 vector 的内存
但是,作为一个正常的程序,你不能指望系统替你做你应该做的事,那些措施的作用只是以防万一
#12
http://www.c-view.org/journal/001/001.htm
请看第一期《c-view》上面的smart pointer.
请看第一期《c-view》上面的smart pointer.
#13
哇,经过一番推敲,我也基本上明白了。
呵呵,灯会结帐!!
呵呵,灯会结帐!!
#14
new和delete是孖生的,一定要一一对应,要不是问题多多.
#15
如果你只是通过new 或malloc创建的内存,那么你的进程退出后,系统会自动回收。所谓的内存泄漏是指你的程序没有退出,你malloc或new的内存不用时不去释放造成系统内存浪费
#16
老猫的话是正确.
只要你的进程最后是退出了,就不存在内存泄漏了.OS会把你的内存资源全部回收的.
但对一个需要长时间运行或是无限期运行的程序来说,new/delete配对就十分重要了.否则程序要宕的.
同时,我认为new/delete配对是书写良好程序的规范,尽量遵守的好!
只要你的进程最后是退出了,就不存在内存泄漏了.OS会把你的内存资源全部回收的.
但对一个需要长时间运行或是无限期运行的程序来说,new/delete配对就十分重要了.否则程序要宕的.
同时,我认为new/delete配对是书写良好程序的规范,尽量遵守的好!