动态空间管理

       定义数组时,占用静态分配单元,数组大小在编译阶段就确定了,而实际应用中又经常需要在程序运行期间才确定数组大小,这就需要动态分配函数malloc和calloc,从内存空间中的堆中获取动态空间,建立动态数组。(在C#中不用这么麻烦啦,一个List类就解决问题)

      void* malloc(unsigned size);//按字节数size分配内存空间,返回空间起始地址。

      void* calloc(unsigned numElements,unsigned sizeofElements);//按元素个数和元素大小分配内存空间,返回空间起始地址。

     如果动态分配没有成功,返回值为NULL,这时应该终止程序。

     建立一个长度为n的一维整形数组:

                                                                int* ptr;  ptr=(int*)malloc(n*sizeof(int));//ptr的n个元素都为随机值

                                                                int* ptr;  ptr = (int*)calloc(n,sizeof(int));//ptr的n个元素均自动初始化为0

     动态分配的返回值是一个指针,但它是一个void型指针,它指向的空间是纯粹的空间,还不是某种类型的数据空间,强制转换成某种类型的指针后,它指向的空间就成为了这种类型的数组空间。

     在编程时,要养成良好的习惯,申请之后一定要判断是否成功申请,若不成功一定要结束程序以免进行后续无效操作。在动态空间不需要的时候,必须由程序员释放掉。

     int* ptr;

     ptr = (int*)malloc(n,sizeof(int));

     if(ptr == NULL)

     {

        printf("allocation failure");

        exit(1);             //终止程序控制权,交还给操作系统。在stdlib.h中

     }

    ...

    free(ptr);   // 撤销指针变量所指向的动态数组空间

    空间的释放free()是一定要做的,不然回引起动态空间资源的耗尽!

    然而事情都是两面的,撤销后也有撤销后的隐患。撤销后,ptr可能任然存放着这段空间的首地址,但不能再通过这个指针间接引用这段空间,此时他已经变成”野指针“了!如果再来一次free(ptr);,会造成系统崩溃的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值