C/C++动态内存分配

5 篇文章 0 订阅
动态内存分配
所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。
C中和C++中对于动态内存的创建和删除都是有些不同的。下面先说C中如何创建动态内存,并删除内存:
动、静态 内存分配比较可以知道 动态内存分配相对于静态内存分配的特点:
1、不需要预先分配 存储空间
2、分配的空间可以根据程序的需要扩大或缩小。
要实现根据程序的需要动态分配 存储空间,就必须用到malloc函数.
malloc函数的原型为:void *malloc (unsigned int size) 其作用是在内存的 动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的 指针。还有一点必须注意的是,当函数未能成功分配存储空间(如 内存不足)就会返回一个NULL 指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

运行结果如下:
Name = Zara Ali
    Description: Zara ali a DPS student in class 10th
那么,说道分配内存,该如何删除内存呢?在C中有一个函数 free,就是把内存还给系统:
free(description);
只需要在printf正下方,输入如上函数格式,即可删除占用的内存。
需要注意的是,在C++中也可以使用C里的动态创建内存方式,用malloc动态生成的对象,用free(地址)删除内存时,不会执行构造函数和析构函数,但是用 new创建的对象和用delete删除的对象会执行构造函数和析构函数!!
C++中是如何动态内存分配的呢?又如何删除使用的内存呢?如下:
我们可以定义一个指向 double 类型的指针,然后请求内存,该内存在执行时被分配。我们可以按照下面的语句使用 new 运算符来完成这点:
double* p  = NULL; // 初始化为 null 的指针
<span style="white-space:pre">	</span>    p  = new double;   // 为变量请求内存

malloc() 函数在 C 语言中就出现了,在 C++ 中仍然存在,但建议尽量不要使用 malloc() 函数。new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。
在任何时候,当您觉得某个已经动态分配内存的变量不再需要使用时,您可以使用 delete 操作符释放它所占用的内存,如下所示:
delete p;        // 释放 pvalue 所指向的内存
那么用一个实例在证明可行性:
#include <iostream>
using namespace std;

int main ()
{
   double* pvalue  = NULL; // 初始化为 null 的指针
   pvalue  = new double;   // 为变量请求内存
 
   *pvalue = 29494.99;     // 在分配的地址存储值
   cout << "Value of pvalue : " << *pvalue << endl;

   delete pvalue;         // 释放内存

   return 0;
}
运行结果如下:
Value of pvalue : 29495

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值