数组内存释放问题
- C/C++ code
int ia[3][4]={{0,0,0,0},{1,1,1,1},{4,4,4,4}};int **pia=new int*[3];for(int **ix=pia,i=0;ix!=pia+3;++ix,++i){ *ix=new int[4]; for(int *p=*ix,j=0;p!=*ix+4;++p,++j) { *p=ia[i][j]; }}for(int **ix=pia;ix!=pia+3;++ix){ for(int *i=*ix;i!=*ix+4;++i) cout<<*i<<endl;}for(int **p=pia;p!=pia+3;p++) delete [] *p; for(int **ix=pia;ix!=pia+3;++ix){ for(int *i=*ix;i!=*ix+4;++i) cout<<*i<<endl;}delete [] pia;输出为:
0
0
0
0
1
1
1
1
4
4
4
4
0
0
0
0
3682096
1
1
1
3682120
4
4
4
是不是没释放完?求答疑
[解决办法]
释放是将内存收回
但是指针的值并没有改变
指针也是个变量
你不去改变这个值
它就不会变
[解决办法]
基本上new几次就delete几次。
[解决办法]
你的new 跟delete 要一一对应。
[解决办法]
vs2010跑楼主代码结果
- C/C++ code
000011114444-17891602-17891602-17891602-17891602-17891602-17891602-17891602-17891602-17891602-17891602-17891602-17891602
[解决办法]
仅供参考
- C/C++ code
//在堆中开辟一个4×5的二维int数组#include <stdio.h>#include <malloc.h>int **p;int i,j;void main() { p=(int **)malloc(4*sizeof(int *)); if (NULL==p) return; for (i=0;i<4;i++) { p[i]=(int *)malloc(5*sizeof(int)); if (NULL==p[i]) return; } for (i=0;i<4;i++) { for (j=0;j<5;j++) { p[i][j]=i*5+j; } } for (i=0;i<4;i++) { for (j=0;j<5;j++) { printf(" %2d",p[i][j]); } printf("\n"); } for (i=0;i<4;i++) { free(p[i]); } free(p);}// 0 1 2 3 4// 5 6 7 8 9// 10 11 12 13 14// 15 16 17 18 19
[解决办法]
[解决办法]
你new内存,会把地址给指针
但是你delete内存,系统会把内存收回,却不会去改变刚才那指针的值
指针就是个变量,存放的这个地址已经是野指针了
内存已经被系统回收了