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

一个关于内存回收的奇怪有关问题

2012-02-09 
一个关于内存回收的奇怪问题?#includestdlib.hmain(){double*pp(double*)malloc(3*sizeof(double))p[

一个关于内存回收的奇怪问题?
#   include   <stdlib.h>
main   (   )
{     double   *p;
      p=(double   *)   malloc(3*sizeof(double));
      p[0]=1.5;p[1]=2.5;p[2]=3.5;
      printf( "%f%f%f\n ",p[0],p[1],p[2]);  
      free   (p);
}


请问free(p)收回的是一个double的内存还是3个double的
上面的free如果用错了,应怎样改??
谢谢

[解决办法]
malloc后,返回首地址,它不但分配内存,并且在内存的前面还分配一定的空间用于记录分配的内存大小,所以free的时候,按照分配的大小释放的,你不用担心没有释放完毕,当然如果重复释放的话,会引起内存错误,甚至引起软件崩溃和OS的异常
[解决办法]
注意free (p);后要p=NULL;否则出现野指针,我们可以
double *p;
p=(double *) malloc(3*sizeof(double));
free (p);//释放的是分配的内存,p还存在
p=NULL;
p=(double *) malloc(20*sizeof(double));
free (p);

热点排行