15深入理解C指针之---内存释放
一、手动申请的内存,必须及时进行内存释放,否则容易造成内存泄露。主要代码形式为:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(int argc, char **argv) 5 { 6 int *ptrInt = (int *)malloc(sizeof(int) * 6); 7 int size = 6; 8 for(int i = 0; i < size; i++){ 9 *(ptrInt + i) = 90 + i; 10 } 11 12 for(int i = 0; i < size; i++){ 13 printf("ptrInt[%d]: %d\t", i, *(ptrInt + i)); 14 } 15 free(ptrInt); 16 17 return 0; 18 }
一般情况下,都会将内存释放后,将其赋值为NULL,会更加安全。
二、特殊情况:
1、重复释放,大多是粗心无意识的,代码如下:
int *ptrInt = (int *)malloc(sizeof(int)); *ptrInt = 9; free(ptrInt); … free(ptrInt);
2、重复释放,主要是对指针与内存的关系不明了,其实ptrInt和ptrInt1指向同一块内存,不能也不需要释放两次,代码如下:
int *ptrInt = (int *)malloc(sizeof(int)); *ptrInt = 9; int *ptrInt1 = ptrInt; free(ptrInt); free(ptrInt1);
3、内存释放的问题:
1)、可能非常耗时,特别是存在结构体是更是如此;
2)、可能增加应用程序大小;
3)、可能导致程序运行时间加长;
4)、可能会增加编程错误的概率;
5)、可能会比不释放造成更多的问题;
人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。