关闭

关于malloc/free的学习心得

标签: 学习笔记
90人阅读 评论(0) 收藏 举报
分类:

    老师让把函数都改成可重入函数的时候,我就有点“一脸懵逼样“了,因为我不仅特别爱用全局变量,还特别爱用malloc和free。以前可以用C++的时候,因为比malloc用法还简便,用new和delete更是肆无忌惮。但是函数之间的调用理得还不是很清楚,调试的时候不断出问题。在网上查了查关于malloc和free的用法,归整一下自己的认识与思绪,如下:

函数使用示例:

        char *Ptr = NULL; 
        Ptr = (char *)malloc(100 * sizeof(char)); 
        if (NULL == Ptr) 
   
  { 
      
    exit (1); 
    } 
        gets(Ptr); 

       ...
        free(Ptr); 
        Ptr = NULL; 
        

关于函数使用需要注意的一些地方:

A、申请了内存空间后,必须检查是否分配成功。

B、当不需要再使用申请的内存时,记得释放;释放后应该把指向这块内存的指针指向NULL,防止程序后面不小心使用了它。

C、这两个函数应该是配对。如果申请后不释放就是内存泄露;如果无故释放那就是什么也没有做。释放只能一次,如果释放两次及两次以上会

出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。

D、虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但是最好还是在前面进行强制类型转换,因为这样可以躲过一些编译器的检查。


对于自己来说有两点认识比较重要:

第一就是申请内存空间之后需要检查一下是否分配成功。自己对于自己写过的代码往往是有着“迷の自信”,对于电脑的执行更是有着三倍的“迷の自信”。自己一直是做编程实验的那种“这样应该就通过了”的思想其实是很危险的,对待代码的逻辑准确性应该严格更严格!

第二就是自己之前对于把指针放空和free之间的关系理解的不是很透彻。有时候只是把指针放空了就觉得行了,留下“孤儿”一样的内存占着地方就不管了,或者free之后,就忘了再管指针了。这两种行为都有可能导致严重的系统错误!

另外关于exit()

用于退出程序。括号里的数字本身没有更多内涵,对于运行效果无影响,但是可以认为规定其含义。比如exit(1)是内存申请失败;exit(2)是打开文件失败等。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2600次
    • 积分:76
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档