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)、可能会比不释放造成更多的问题;
    

posted @ 2017-06-08 06:20  叕叒双又  阅读(900)  评论(0编辑  收藏  举报