成都市社会保险卡:C++动态分配内存?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 12:43:49
 
比如说用用NEW分配10字节给一个数组指针str ,即:str=new char[10];
然后赋个值给它...现在我们再给它重新分配,即: str=new char[3];那原先的值到哪去了...
 
一楼二楼说的我不是很明白,重新分配之后,值还会系统中吗?
除了内存泄漏,会不会影响变量的使用?

str = new char[10];
现在假设new char[10]返回地址为 0x1000
所以str的值为0x1000
这个时候你又str = new char[3]
假设new char[3]返回地址为 0x1100
所以str的值为0x1100
这个时候0x1000,也就是你刚才分配的内存仍然存在没有被释放,但是又没有一个指针指向它,导致这个内存不能被利用,也不能被回收
就是内存泄漏

可以用垃圾收集器释放它们,java有这个东西,c++要自己做的

原来的内存丢失了,就是传说中的内存泄露,呵呵

原先的值还在内存中,在回收之前一直存在,单如果不保留指针也就是内存中的地址的话,就无法回收,除非操作系统定时回收,否则相应内存位置不可用

MS不会响应变量的使用。

这是个有趣的内存分配问题
用new是告诉系统要在堆内存中开辟空间
如果你不想使用了,也就是生命期结束了,可以用
delete [] 指针 来释放内存
如果向这样:
for(i=0;i<10;i++) p = new int [10] ;
结果就是在i = 0 ..... 8这段内分配的90个整型数空间被遗漏了,也就是内存泄露,空间浪费啊