天天看点

C/C++之动态内存分配

在C中用库函数malloc实现动态内存分配

malloc是在C语言中用于在程序运行时在堆中进行动态内存分配的库函数。

1、函数原型

#include <stdlib.h> 
void *malloc
(    
    size_t size 
);
           

返回值:

成功时,返回所分配存储空间的起始地址;返回值类型为void*,在C语言中可以把void*直接赋给具体的类型,但是在C++中必须进行强制类型转换。

在C中用库函数free释放动态内存

在C++中用new实现动态内存分配

一. 分配一个变量

对于 P = new T (T是任意类型名,P是类型为T *的指针),就是动态分配出一片大小为sizeof(T)字节的内存空间,并且将内存空间的起始地址赋值给P。eg:

int * pn;
pn = new int;
* pn = 5;
           

二. 分配一个数组

对于 P = new T[Na] (T是任意类型名,P是类型为T *的指针),就是动态分配出一片大小为N * sizeof(T)字节的内存空间,并且将内存空间的起始地址赋值给P。eg:

int * pn;
pn = new int[100];
pn[0] = 5;
           

返回值:

成功时,返回所分配存储空间的起始地址;返回值类型为T*。

在C++中用delete释放动态内存

注意:用“new”动态分配的内存空间一定要用“delete”运算符进行释放。

一. 释放一个变量

语法:

delete 指针;   //  该指针必须指向new出来的变量
           

eg:

int * p = new int;
*p =5;
delete p;
           

注意:一片空间不能被delete多次。

二. 释放一个数组

语法:(一定要加[ ])

delete [] 指针;   //  该指针必须指向new出来的数组
           

eg:

int * p = new int[20];
p[0] =5;
delete []p;
           

继续阅读