c++ 动态内存分配

1. 使用new动态分配内存,使用delete释放动态申请的内存

[语法]
类型名 *指针变量 = new 类型名;
类型名 *指针变量 = new 类型名[元素个数];

int *pNum = new int;

int i = 5;
int *p = new int[5];

例子:

#include 
#include
using namespace std;

int _tmain(int argc, _TCHAR*  argv[])
{
    int num = 0;//数组个数
    cout<<"请输出数组个数"<>num;//获取数组个数
    cout<<"请依次输入"<>pSz[i];
    }
    for(int i = 0; i

其中这句话为动态申请内存的的语句:int *pSz = new int[num];
delete 为释放内存的语句,执行结束,
输出的结果:

请输出数组个数
请依次输入3个整数(用空格隔开)
23  9  8989
第0个数为:23
第1个数为:9 
第2个数为:8989

2.使用malloc和free动态申请内存宏定义

void malloc(unsigned int size);
void free(void  *p);
shor *p = (short*) malloc(len *sizeof(short));
free(p);
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int *p=(int*)malloc(sizeof(int) * 5); //使用malloc申内存,存储5个int型元素
    //每个元素的字节数是sizeof(int) sizeof(类型A)*N 的计算方式获取大小
    //获取的指针地址需要强制转换为指定类型
    cout<<"请输入5个整数"<>*(p+i);
    }
    cout<<"第三个为:"<

3. new delete 和 malloc free 的区别

  • 1. malloc开辟出的是一片空间,返回的是一个void *的指针,用的时候必须强制转换。而new直接返回的就是该类型的指针。
  • 2. 最为关键的就是对于非内部数据类型的对象也就是自定义的类型而言,只用malloc free无法满足动态对象的要求。
  • 3. 对象在创建的同时要执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc free是库函数不是操作符,不在编译器控制权限之内,无法把构造函数和析构函数任务强加给malloc和free。 因此 C++语言有了new 和 delete来完成动态内存分配和初始化的工作。
  • 4.malloc和free还不能为动态对象初始化,要想初始化必须给类再写一个初始化void Initialize();的函数。

你可能感兴趣的:(c++ 动态内存分配)