牛骨文教育服务平台(让学习变的简单)
博文笔记

c语言中内存的动态分配与释放(多维动态数组构建)

创建时间:2016-07-17 投稿人: 浏览次数:201

原文网址:点击打开链接

一. 静态数组与动态数组
   静态数组比较常见,数组长度预先定义好,在整个程序中,一旦给定大小后就无法再改变长度,静态数组自己自动负责释放占用的内存。
   动态数组长度可以随程序的需要而重新指定大小。动态数组由内存分配函数(malloc)从堆(heap)上分配存储空间,只有当程序执行了分配函数后,才为其分配内存,同时由程序员自己负责释放分配的内存(free)。

二. 为什么要使用动态数组?
    在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用静态数组的办法很难解决。为了解决上述问题,c语言提供了一些内存管理函数,这些内存管理函数结合指针可以按需要动态地分配内存空间,来构建动态数组,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

三. 动态数组与静态数组的比较
    对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!   
    对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。

四. 如何构建动态数组?
    构建动态数组时,我们遵循下面的原则:
    申请的时候从外层往里层,逐层申请;
    释放的时候从里层往外层,逐层释放;


五. 构建动态数组所需指针
    对于构建一维动态数组,需要一维指针;   
    对于二维,则需要一维,二维指针;   
    对于三维,需要一,二,三维指针;   
    依此类推。

六. 动态内存分配与释放函数

  1. /*动态内存分配与释放函数*/
  2. void *malloc(unsigned int size);
  3. void *calloc(unsigned int num, unsigned int size); 
  4. void *realloc(void *p,unsigned int size); 
  5. void free(void *p);
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。