首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数组内存释放有关问题

2012-09-16 
数组内存释放问题C/C++ codeint ia[3][4]{{0,0,0,0},{1,1,1,1},{4,4,4,4}}int **pianew int*[3]for(in

数组内存释放问题

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
[解决办法]
探讨

引用:

vs2010跑楼主代码结果

C/C++ code

0
0
0
0
1
1
1
1
4
4
4
4
-17891602
-17891602
-17891602
-17891602
-17891602
-17891602
-17891602
-17891602
-17891602
-17891602
-17891……

[解决办法]
你new内存,会把地址给指针
但是你delete内存,系统会把内存收回,却不会去改变刚才那指针的值
指针就是个变量,存放的这个地址已经是野指针了
内存已经被系统回收了

热点排行