打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
第二十一讲 资源管理

       为什么说C/C++是不安全的呢?因为他们都直接在内存上操作,稍有不慎就会漏洞百出,不论是数组越界还是内存泄漏都是一些极为棘手的问题,稍微短小的代码还好排错,要是几万行的代码怎么处理?所以资源管理不管是C还是C++都极为重要,要做一个合格的程序员,就要能够管理内存资源。说到内存管理,今天不得不说的两个函数就是上次我们说到的malloc()和free()了。

 -----------------------------------

double * ptr;

ptr = (double*)malloc(50*sizeof(double));

-------------------------------------

       这段代码请求 30 个 double 类型值的空间, 并且把 ptr 指向该空间的所在位置。

       注意 ptr 是作为指向一个 double 类型值的指针声明的,而不是指向 50个 double 类型值的数据块的指针。

       记住: 数组的名字是它第一个元素的地址, 因此,如果我们令 ptr指向一个内存块的第一个元素,就可以像使用数组名一样使用它。也就是说,可以使用表达式 ptr[0] 来访问内存块的第一个元素,ptr[1] 来访问第二个元素, 依此类推。正如前面所学,可以在指针符号中使用数组名,也可以在数组符号中使用指针。

      说到这里,我们好像发现声明一个数组的方式似乎有两种了,哪两种呢?我们现在来理一理:

     1. 声明一个数组,声明时用常量表达式指定数组维数,然后可以用数组名访问数组元素。       

      2. 声明一个指针, 调用 malloc(),然后使用该指针来访问数组元素。

      用第二种方式,既是用malloc可以做一些用普通的数组声明做不到的事:创建一个动态数组 (dynamicarray),即一个在程序运行时才分配内存并可在程序运行时选择大小的数组. 例如, 假定 n 是一个整数变量. 在 C99 之前, 不能这样做:

      double array[n];  

      如果 n 是一个变量, c99 之前不允许这样做,就算是现在的VS2012也不支持这么写,不过GCC支持。
       然而, 即使在 c99 之前的编译器中,如果想要申请一个变量数组,我们可以这样做:

      ptr = (double *) malloc (n * sizeof(double)); 

      是不是发现这种方式很有用吗?动态创建的好处是对资源的利用,下面是一个更为普通的使用方法:

-------------------------------------

      T* ptr;

      ptr = (T*)malloc(sizeof(T)*n);

-------------------------------------

     T表示类型,在malloc面前的这个T可有可无,在C里面是这样的,不过在C++里就必须要有,所以为了和C++兼容,我们还是把他带上。

     当然,在结束使用之后,记得使用free()将资源释放。free()参数就是要释放的内存,如果我们使用完ptr后,我们就用free将他释放掉:free(ptr)即可。

       malloc的参数就是我们想要的内存大小,为了不至于内存泄漏,为了不至于数组越界,所以我们就得更好的利用这个函数去动态分配内存。

       和malloc一样,calloc也是动态分配内存的函数,该函数和malloc的用法有些不一样,如果我们用calloc来修改上面的定义就得这样写了:

----------------------------------

double* ptr;

ptr = (double*)calloc(50,sizeof(double));

-------------------------------------

       其中端倪就留给大家去探索了,calloc同样可以用free来释放内存。

       关于C/C++的五种储存类型就留待大家去探索吧,我就不打算说了。明天我们说文本文件的操作吧。

 

==================

回复D&d直接查看目录

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
malloc()与calloc区别
内存分配不再神秘:深入剖析malloc函数实现原理与机制
UC头条:C语言动态内存管理详解
c与c++分别是怎样动态分配和释放内存的,有什么区别?(转) demo大全
C语言动态存储分配
malloc
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服