请教关于内存释放问题!
程序如下:
cout < < "------------After 5Seconds start------------- " < < endl;
sleep(5);
cout < < "------------create Packet start------------- " < < endl;
for (int i = 0; i <3000000; i++) {
char* xx = new char[1024];
if (i%100000 == 0) {
cout < < "------Now create------- " < <i < < endl;
sleep(2);
}
if (xx = NULL) {
cout < < "-------new failer------- " < <i < < endl;
break;
}
delete xx;
}
cout < < "------------create Packet finish------------- " < < endl;
sleep(20);
执行前内存状况:
Mem: 1034420k total, 153768k used, 880652k free, 4268k buffers
Swap: 2031608k total, 140840k used, 1890768k free, 33720k cached
执行后内存状况:
Mem: 1034420k total, 1001564k used, 32856k free, 132k buffers
Swap: 2031608k total, 2031608k used, 0k free, 9224k cached
大概执行了290万次以上吧,操作系统自动把程序关掉。
执行纪录如下
[tou-h@loadtester-03 bin]$ ./dst2_d
------------After 20Seconds start-------------
------------create Packet start-------------
------Now create-------0
------Now create-------100000
------Now create-------200000
------Now create-------300000
------Now create-------400000
------Now create-------500000
------Now create-------600000
------Now create-------700000
------Now create-------800000
------Now create-------900000
------Now create-------1000000
------Now create-------1100000
------Now create-------1200000
------Now create-------1300000
------Now create-------1400000
------Now create-------1500000
------Now create-------1600000
------Now create-------1700000
------Now create-------1800000
------Now create-------1900000
------Now create-------2000000
------Now create-------2100000
------Now create-------2200000
------Now create-------2300000
------Now create-------2400000
------Now create-------2500000
------Now create-------2600000
------Now create-------2700000
------Now create-------2800000
------Now create-------2900000
強制終了
[tou-h@loadtester-03 bin]$
请问程序中我已经释放了内存,为什么还会消耗掉所有内存?
请高人解释!!谢谢!
[解决办法]
new和delete要配对。你new char[1024]就该用delete[] xx
[解决办法]
delete[] xx;
------解决方案--------------------
char* xx = new char;
delete xx; //单个对象的空间, 使用 delete 释放
or:
char* xx = new char[1024];
delete[] xx; //连续多个对象的空间,使用 delete[] 释放
[解决办法]
char* xx = new char[1024];
if (i%100000 == 0) {
cout < < "------Now create------- " < <i < < endl;
sleep(2);
}
if (xx = NULL) {
cout < < "-------new failer------- " < <i < < endl;
break;
}
//delete xx;
delete [] xx;
用delete xx只释放xx指针空间,delete [] xx才会释放全部空间
[解决办法]
有些……的编译器在
int a= new int[1024];
delete a;时会报警告,有些则会忽略过去(只free开头一个单元),有些支持这样流氓的方言
但是标准是不建议的数组就要用delete[],单个就要用delete
具体为什么会产生这样的问题要看分配器的设计,有些会保存一个THUNK在首(或者尾)来监视释放过程,这个THUNK通常记录了分配时的大小或者有一些溢出保护之类,所以有些编译器在delete a;这样的释放中参考了这个thunk而得过且过了,但是这是不负责的行为。
……不知道为什么会说那么多………………
[解决办法]
已经解决了,蹭分
[解决办法]
应该用 delete []xx; xx = NULL;
没有设置为NULL只是让xx成为野指针,确实很危险,但是接下来不会耗尽所有内存
