在C语言中使用指针,一要防止内存泄漏,二要防止指针误操作已经不属于它引用的内存
一、如果指针是指向一个变量,那么只管用,不会有任何问题。
如:
int a=5;
int *p=&a;
.......
return *p;
没有任何问题,函数返回后,a,p都将被销毁,p占用的内存及p引用(指向)的内存都将被释放。
二、如果指针指向的内存是通过malloc函数动态分配而来的,那么在使用后要马上释放,否则就会引起内存泄漏
如:
int *p=NULL;
p=(int *)malloc(sizeof(int));
................//其它使用指针的语句
free(p);
p=NULL;
return 0;
在上面例子中,在函数返后回,p立即会被销毁,p占用的内存会放释放,如果我们在程序中没有使用free函数对p指向的内存进行释放,p指向(引用)的内存(通过free函数申请到的内存)不会被自动释放,而且因为已经没有指针再记住他的地址,这段内存就成了游离在外无法再被使用的幽灵,这就是曲型的内存泄漏
为了防止出现这种情况,在使用malloc函数进行动态内存分配,并使用完毕后,要马上使用free函数对使用完的动态内存进行释放,释放后为了防止指针p误操作内存还要使用p=NULL。
在一个函数中malloc,free,=NULL要成对出现,对某段动态内存的申请 ,使用,回收也要尽量在一个函数体内完成。
阅读(3543) | 评论(0) | 转发(0) |