zoukankan      html  css  js  c++  java
  • 【C语言天天练(九)】动态内存分配

    引言:数组的元素存储于内存中连续的位置上。当一个数组被声明时。它所须要的内存在编译时就被分配。

    可是,我们能够使用动态内存分配在执行时为它分配内存。


    一块内存的生命周期能够分为四个阶段:分配、初始化、使用、释放。

    内存的分配一般使用C函数库里的malloc函数(原型:void *malloc(size_t size))。

    关于malloc函数应该注意一下几点:

    1、malloc的參数就是须要分配的内存的字节数。

    2、malloc所分配的是一块连续的内存。

    3、分配成功。则返回指向分配内存起始地址的指针。分配失败,返回NULL指针。

    4、对每一个malloc返回的指针都进行检查,是好的习惯。

    内存的初始化一般要在使用之前手动进行,也能够在分配时由calloc函数一同完毕:将分配内存初始化为0。

    使用就是使用分配所返回的指向内存的指针。

    释放内存是为了防止内存泄露,一般使用free函数(原型:void free(void *pointer))完毕。它的參数必须是先前从malloc、calloc或realloc返回的值。向free传递一个NULL參数不会产生不论什么效果。向free传递其它參数会出错。

    注意:常见的动态内存错误有下面几种

    1、忘记对NULL指针进行解引用操作,即忘记对分配返回的值做推断。

    2、对分配的内存进行操作时越过边界。

    3、释放并不是动态分配的内存,传递给free的必须是一个从malloc、calloc或realloc返回的指针。

    4、试图释放一块动态分配的内存的一部分。

    5、一块动态内存被释放后被继续使用。

    使用动态内存的编程总结:

    1、动态内存分配有助于消除程序内部存在的限制。

    2、使用sizeof计算数据类型的长度,调高程序的可移植性。


    补充:calloc和realloc函数

    void *calloc(size_t nmemb, size_t size);

    void *realloc(void *ptr, size_t size);

    calloc与malloc的差别一是前者返回指向内存的指针之前把它初始化为0.二是calloc的參数包含所需元素的数量和每一个元素的字节数。依据这些值,可以计算出总共须要分配的内存。

    realloc函数用于改动一个原先已经分配的内存卡的大小。使用该函数,能够使一块内存扩大或缩小。假设原先的内存卡无法改变大小。realloc将分配还有一块正确大小的内存,并把原先那块内存的内容拷贝到新的块上。

  • 相关阅读:
    格式化输出及基本运算符
    初识python
    项目: python爬虫 福利 煎蛋网妹子图
    mycat重启报错Failed to connect to the Wrapper at port解决方法
    使用nginx加zuul配置
    mycat登录报错Host 'XXX' is blocked because of many connection errors的另一种解决思路
    mycat查表报错Invalid DataSource:0解决方法
    《JUnit实战(第2版)》读书笔记
    博客园的博客积分与排名查看方法
    橄榄球教练不应兼任产品拥有者(译)
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6880378.html
Copyright © 2011-2022 走看看