关于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;...

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

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

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

建议21:尽量用new/delete代替malloc/free 在C语言中,我们已经熟悉利用malloc/free来管理动态内存,而在C++中,我们又有了新的工具:new/delete。你不禁会产生...

malloc和free函数学习

一、malloc()和free()的基本概念以及基本用法:        1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返...

malloc()与free()学习笔记

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

C++学习:malloc/free和new/delete动态内存分配

C++学习:malloc/free和new/delete简介: 在C语言中,内存的申请和释放采用的是malloc/calloc/realloc/free来实现的,而在C++语言中,不仅可以使用以上的...

C语言学习之内存管理函数malloc()和free()

原文:http://blog.csdn.net/sdwuyulunbi/article/details/6643481       在C语言的学习中,对内存管理这部分知识的掌握尤其重要。 ...
  • dscyw
  • dscyw
  • 2013年04月04日 21:32
  • 818

达内Java学习心得之易犯错误

  • 2015年11月03日 10:14
  • 81KB
  • 下载

建模学习心得

  • 2015年08月03日 17:20
  • 15KB
  • 下载

c++学习笔记(四):c++中new delete关键字 VS c语言中malloc free函数

1 new delete 操作符号 c++的关键字,malloc free是c语言的库函数。     2 new malloc都是在堆上分配内存  由delete free释放 。 分配释放基础类型 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于malloc/free的学习心得
举报原因:
原因补充:

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