1,C中内存申请有哪些(标准库函数)
|
函数名 | 函数原型 | 作用 | 例子 | 二维数组的申请,释放 |
| malloc | void * malloc(size_t size) |
动态内存的申请 函数本身不知内存类型,关心内存的总字节数 | int * p =(int *)malloc(sizeof(int)* length); |
(1)INT ** P =(INT **)的malloc(的sizeof(INT *)*米); for(int i = 0; 我<M; 我++) p [i] =(int *)malloc(sizeof(int)* n);
(2)//申请三行两列的整形数组 int(* a)[2] =(int * [2])malloc(sizeof(int)* 3 * 2); (3)用一个一位数组来模拟二维数组 int * array =(int *)malloc(nows * columns * sizeof(int)); 使用的时候:阵列[I *列+ j]的访问第I,J个成员 |
| realloc | void * realloc(void * ptr,unsigned newsize) | 给一个申请已经了的内存指针重新分配内存,调整内存块的大小 |
int * p =(int *)malloc(sizeof(int)* length); p = realloc(p,20); | |
| calloc | void * calloc(size_t num,size_t sizeofElement) | 与的的的malloc的差不多,会对里面数据进行初始化为0 | char * ptr =(char *)calloc(length,sizeof(char *)); | |
| 自由 | void free(void * p) | 释放内存 | 自由(P); |
2,C ++中内存申请/释放
新的(C ++中运算符)/删除,新的内置了sizeof,类型转换,类型安全检查功能,对与非内部数据对象,完成初始化工作。
用法:1,int * p = new int [length];
删除[P];
2,int ** p = new int * [m]; //二维数组申请
for(int i = 0; i<M; i++)
p [i] = new int [n];
for(int i = 0; i<N; i ++)//二维数组释放
{delete p [i];
P [I] = nullptr; }
删除[] p;
P = nullptr;
3,新/删除与的malloc /免费区别
(1)相同点;用于动态内存的申请和释放
(2)不同点:1,操作对象不同
对于非内部数据对象,malloc / free无法满足动态对象的要求
2,用法不同(见表格)
本文详细介绍了C/C++中动态内存的申请与释放,包括C语言的标准库函数和C++中的new/delete运算符。C++的new特性如内置sizeof、类型安全检查,以及如何进行二维数组的动态分配与释放。同时对比了new/delete与malloc/free的区别,如操作对象和用法上的差异。
2万+

被折叠的 条评论
为什么被折叠?



