关于内存释放的问题

myyan 2004-01-16 08:46:47
char *init()
{

char *p=(char *)malloc(52*4*sizeof(char));
......
return p
}
void main()
{
char (*Arr)[4];
Arr=init();
}

在init()中动态申请内存,主函数中要用到申请的内存,请问在用完后怎样释放?
...全文
41 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ccwwcsdnc 2004-01-16
这样做:

main ()
{ float **f=NULL;
f = alloc2float(80,60); //申请二维数组f[60][80],注意参数次序;
if(f==NULL){ printf("alloctet error!\n"); exit(); }
.....
free2float(f);
}

/* allocate a 2-d array of floats */
float **alloc2float(size_t n1, size_t n2)
{
return (float**)alloc2(n1,n2,sizeof(float));
}

/* free a 2-d array of floats */
void free2float(float **p)
{
free2((void**)p);
}

/* allocate a 2-d array */
void **alloc2 (size_t n1, size_t n2, size_t size)
{
size_t i2;
void **p;

if ((p=(void**)malloc(n2*sizeof(void*)))==NULL)
return NULL;
if ((p[0]=(void*)malloc(n2*n1*size))==NULL) {
free(p);
return NULL;
}
for (i2=0; i2<n2; i2++)
p[i2] = (char*)p[0]+size*n1*i2;
return p;
}

/* free a 2-d array */
void free2 (void **p)
{
free(p[0]); //释放时,一维一维的释放,与申请时的次序相反。
free(p);
}



  • 打赏
  • 举报
回复
aph 2004-01-16
char (*Arr)[4];
Arr[0] = init();
free(Arr[0]);

应该这样吧!
  • 打赏
  • 举报
回复
myyan 2004-01-16
就这样吧。
本来我用栈内存分配,函数结束后就没有了,每次都是乱码,可能是栈内存释放后容易被抹掉,或者栈内存释放后又变回原来的值了。而堆内存不容易去掉,尤其是大内存的机器,要等用到的时候才能抹掉。
  • 打赏
  • 举报
回复
weimj 2004-01-16
free就释放了,一时还可以用也很正常,因为free并没有把数据抹掉,只是标志内存可以再次被分配.
  • 打赏
  • 举报
回复
格兰特杨 2004-01-16
要不然这样,但不确定。实际上free后是可能取到数据的,除非在free前用memset清零。
char (*Arr)[4];
Arr=init();
for (i = 0; i< 52; i++)
{
free Arr[i];
}
建议你把Arr声明成 char **Arr可能会好些。
  • 打赏
  • 举报
回复
big_d 2004-01-16
free(Arr);
Arr=NULL;
  • 打赏
  • 举报
回复
myyan 2004-01-16
我想创建的是二维数组,使用Arr指向函数中的内存,本来觉得以为可以释放掉,但是
释放后通过指针还可以取到数据。不知道有没有释放成功。
  • 打赏
  • 举报
回复
格兰特杨 2004-01-16
这里声明成Arr为指向char数组的指针...。//而不是char指针的数组。
根据怎样申请就怎样释放的原则,不适用delete,直接free(Arr)我觉得就可以!

讨论!
  • 打赏
  • 举报
回复
dddd8888 2004-01-16
你这样写就不对
  • 打赏
  • 举报
回复
victor_cui 2004-01-16
free(Arr)即可
  • 打赏
  • 举报
回复
workhand 2004-01-16
指向一个空的
  • 打赏
  • 举报
回复
发帖
C语言

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
帖子事件
创建了帖子
2004-01-16 08:46
社区公告
暂无公告