企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
动态内存分配 malloc(size_t size); malloc将用户分配size_t字节个内存并返回内存分配地址,如果分配地址失败,那么返回0 ``` int*pa=(int*)malloc(4); ``` pa是分配好内存的地址4是要分配的大小 如果内存分配失败,那么pa=0 if(p==nullptr) { std::cout<<"内存分配失败"; } ``` void*calloc(size_t count,size_t size); ``` calloc将用户分配count乘size_t字节个内存并且返回内存分配的地址,如果分配失败,那么返回0 ``` int*pa=(int*)calloc(1,4) ``` pa是分配好的内存的地址1是要分配元素个数4是要分配的每个个数的大小 如果内存分配失败,那么pa=0 calloc会将分配好的内存区域设置为0 ``` free(p); frpp(pm); ``` C++内存分配 数据类型*指针变量名称=new 数据类型; ``` int*pa=new int; ``` 数据类型*指针变量名称=new数据类型【数量】; ``` int*pa=new int[5];//分配一段能够存放5个int变量的内存空间 ``` *分配失败pa返回0 ## calloc方法 ``` int main() { unsigned x; std::cout << "分配内存空间"; std::cin >> x; int* p{}; p = (int*)calloc(x, sizeof(int)); //int*p = (int*)malloc(x * sizeof(int)); if (p == 0) { std::cout << "内存分配失败"; } p[0] = 500; p[1] = 600; p[2] = p[0] * p[1]; std::cout << p[0] << " " << p[1] << " " << p[2]; } ``` ## malloc方法 ``` int main() { unsigned x; std::cout << "分配内存空间"; std::cin >> x; //int* p{}; //p = (int*)calloc(x, sizeof(int)); int*p = (int*)malloc(x * sizeof(int)); if (p == 0) { std::cout << "内存分配失败"; } p[0] = 500; p[1] = 600; p[2] = p[0] * p[1]; std::cout << p[0] << " " << p[1] << " " << p[2]; } ``` ## malloc方法与 calloc方法区别 calloc可以自动把没打扫的内存自动清零,但是运行效率低。 ## realloc重新分配 ``` void*realloc(void*_ Block,size_t_Size); ``` realloc将用户重新分配内存,_Block是用户已经分配号的内存,Size是要重新分配大大小,函数返回重新分配后的内存。 代码如下: ``` int main() { unsigned x; std::cout << "分配内存空间"; std::cin >> x; int* p{}; p = (int*)calloc(x, sizeof(int)); //int*p = (int*)malloc(x * sizeof(int)); if (p == 0) { std::cout << "内存分配失败"; } p[0] = 500; p[1] = 600; p[2] = p[0] * p[1]; std::cout << p[0] << " " << p[1] << " " << p[2]; std::cout << "请输入重新分配的内存大小"; std::cin >> x; p = (int*)realloc(p, x); std::cout << p[0] << " " << p[1] << " " << p[2]; free(p); } ``` ## 释放内存 ## void free(void*-Block); free(p指针); //释放地址 # C++内存分配 C++内存分配 ## 数据类型*指针变量名称=new 数据类型; ## 配套的释放内存方式为delete方法 ``` int*pa=new int; ``` 数据类型*指针变量名称=new数据类型【数量】; ``` int*pa=new int[5];//分配一段能够存放5个int变量的内存空间 ``` *分配失败pa返回0 delete 释放内存 如果用new int[5] 释放内存就是 delete [ ] p ### 代码如下: ``` int main() { unsigned x; std::cout << "分配内存空间"; std::cin >> x; int* p{}; p = new int[5]; //分配5个 *p = 500; p[0] = 5000; p[1] = 1000; p[2] = p[0] + p[1]; std::cout << p[0] << " " << p[1] << " " << p[2]; ```