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

内存申请完再释放报错

2012-02-12 
内存申请完再释放报错,高手请进程序如下****************************************************//开辟内存

内存申请完再释放报错,高手请进
程序如下
****************************************************
//开辟内存
double***   a   =   (double***)malloc(4*sizeof(double**));
for(int   i   =   0;   i   <   4;   i++)
{
a[i]   =   (double**)malloc(100*sizeof(double*));
for(int   j   =   0;   j   <   100;   j++)
{
a[i][j]   =   (double*)malloc(8*sizeof(double));
}
}
//释放内存
for(   i   =   0;   i   <   4;   i++)
{
for(int   j   =   0;   j   <   100;   j++)
{
free(a[i][j]);
a[i][j]   =   NULL;

}
//free(a[i]);//加上就报错
a[i]   =   NULL;

}
//free(a);//加上就报错
a   =   NULL;
*****************************************
释放内存的时候加上被注释的两句就报错
//free(a[i]);//加上就报错
//free(a);//加上就报错

[解决办法]

void main()
{
double*** a = (double***)malloc(4*sizeof(double**));
for(int i = 0; i < 4; i++)
{
a[i] = (double**)malloc(100*sizeof(double*));
for(int j = 0; j < 100; j++)
{
a[i][j] = (double*)malloc(8*sizeof(double));
}
}
//释放内存
for( i = 0; i < 4; i++)
{
for(int j = 0; j < 100; j++)
{
free(*(*(a+i)+j));
*(*(a+i)+j) = NULL;

}
//free(a[i]);//加上就报错
free(*(a+i));
*(a+i)= NULL;

}
free(a);
a = NULL;
}
[解决办法]
楼主,我安找你的方法,写的程序可以运行。
#include <stdlib.h>
#include <stdio.h>

void main()
{
double ***a = (double***) malloc(2*sizeof(double**));
for(int i = 0; i < 2; i++)
{
a[i] = (double**)malloc(2*sizeof(double*));
for(int j = 0; j < 2; j++)
{
a[i][j] = (double*)malloc(8*sizeof(double));
}
}

for(i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
{
free(a[i][j]);
a[i][j] = NULL;
}
free(a[i]);
a[i] = NULL;
}
free(a);
a = NULL;

}
楼上的,
a,a[0],a[0][0],它们具体的值是不同,这些跟数组有点差别。
a是第一个分配的地址。
a[0]是第二次分配的地址,
a【0】【0】是第三次分配的地址,
如果它们相同,那么那么说明malloc给你分配的是相同的地址。
[解决办法]
恩不错试验过了
int main()
{double*** a = (double***)malloc(4*sizeof(double**));int i,j;
for(i = 0; i < 4; i++)
{a[i] = (double**)malloc(100*sizeof(double*));
for(j = 0; j < 100; j++)a[i][j] = (double*)malloc(8*sizeof(double));
} /*释放内存*/
for( i = 0; i < 4; i++)for(j = 0; j < 100; j++)free(a[i][j]);
free(a[i]);/*这里没错*/
free(a);/*这里没错*/
//a[i] = NULL; 这个错了吧??能这样写吗?这不是指针!
}

热点排行