zoukankan      html  css  js  c++  java
  • 《c和指针》笔记10动态分配内存

      因为数组存储在内存中连续的位置上,当使用一个数组在运行时才知道长度的情况下,我们就可以使用动态内存分配。

      对于声明时就指定长度的数组来讲,主要有以下几个缺点:

      1、需要使用的元素超过数组的长度

      2、将数组声明得较大,但是某些情况下的数组元素较少时,浪费比较大

      3、使用的元素超过数组长度时,程序必须以一种合理的方式做出相应,而不应该导致异常。

      显然动态内存可以让我们在使用的时候不用在意元素的数量大小,我们可以在运行时,使用malloc函数来获取动态内存,如:10、20、30个int所需的内存。

      但是malloc并不是每次都能将你所需要的内存返回给你,当某些极少数的情况下,malloc未申请到你所需要的内存时,将会返回NULL,因此在程序中,应该对malloc返回的指针进行检查。

      对于malloc的内存块指针,我们需要手动对这块内存进行初始化,如果不想自己手动将其初始化为0的话,可以使用calloc函数,它在返回指针之前会将其初始化为0。

      如果想修改原有的内存大小的话,可以使用realloc函数。以上几个函数的原型如下:

    void *malloc( size_t size );
    void *calloc( size_t num_elements, size_t element_size );
    void realloc( void *pt, size_t new_size );

      那么在使用的过程当中,首先是再次要提醒的是,对于返回的指针需要进行NULL的检查,在操作返回的内存时,也要注意不要越过边界。

      因为你并不能保证,你所访问的超过边界的内存是一个空的内存,其上没有存储其他的数据,如果存在其他的数据,那么当你试图改变或转换该数据时,程序将会崩溃或者晚些时候崩溃。

      因此可以是用#define定义一个不易发生错误的内存分配器。

      对于使用有垃圾回收机制的语言的人可能不习惯自己去释放内存,然而在C中,如果不释放不使用的内存的话,那么将会造成内存泄露。

      另外如果试图释放并非动态分配的内存、继续使用已经释放了的内存的话,也将会造成程序或系统的崩溃。

      

      今天就到这里了,明天继续,加油!

  • 相关阅读:
    APP版本更新通知流程测试要点
    Android+appium +python 点击坐标tap方法的封装
    appium 元素定位find_element_by_android_uiautomator方法使用
    Android 应用加固(乐固)操作说明
    查询APP Store已发布过的版本记录
    appium 报错:AttributeError:"NoneType' object has no attribute 'XXX'
    appium 运行报错:...... Attempt to re-install io.appium.settings without first uninstalling解决方案
    Charles模拟网络请求页面的网络超时测试
    利用漏洞中验证码绕过的小技巧
    C中的volatile用法
  • 原文地址:https://www.cnblogs.com/ahl5esoft/p/2574082.html
Copyright © 2011-2022 走看看