关于malloc/free的学习心得

转载 2016年06月02日 10:16:44

    老师让把函数都改成可重入函数的时候,我就有点“一脸懵逼样“了,因为我不仅特别爱用全局变量,还特别爱用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)是打开文件失败等。

相关文章推荐

new, delete, malloc,free用法心得

这里主要讲一下,我总结的一些内存相关问题问题。1)Opencv 中IplImage 的赋值问题。请看下面代码:IplImage* img1 = NULL;IplImage* img2 = NULL;i...

建模学习心得

  • 2015-08-03 17:20
  • 14KB
  • 下载

malloc()与free()学习笔记

malloc()与free()详解##malloc() void *malloc(size_t size); 表示该函数分配了size个字节,并且返回这块内存的指针,若分配内存失败则返回空指针(N...

Hibernate学习心得

  • 2017-03-20 22:28
  • 24KB
  • 下载

Fortran学习心得与总结

  • 2013-11-09 15:40
  • 331KB
  • 下载

C++学习:动态内存分配对象的new/delete运算符与函数malloc/free

C++学习:对象的new/delete运算符与函数malloc/free摘要: 在学习java的时候,都是使用new来创建新的对象的,对象的存放在堆里的.而回收是由java虚拟机garbag...

mfc学习心得

  • 2013-12-03 20:17
  • 60KB
  • 下载

spring acegi 学习心得

改善C++ 程序的150个建议学习之建议21:尽量用new/delete代替malloc/free

建议21:尽量用new/delete代替malloc/free 在C语言中,我们已经熟悉利用malloc/free来管理动态内存,而在C++中,我们又有了新的工具:new/delete。你不禁会产生...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)