一个关于内存回收的奇怪问题?
# 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);