C语言的动态分配函数
来源:互联网 发布:淘宝网打不开商品强细 编辑:程序博客网 时间:2024/06/15 13:27
动态分配函数的核心是malloc()和free()。每次调用malloc()时,均分配剩余的内存的一部分;每次调用free()时,均向系统返还内存。被分配的空内存区中的内存叫做堆(heap)。动态分配函数的原型在<stdlib.h>中。
标准C定义了4种动态分配函数,可以用于所有的编译程序。它们是:calloc(),malloc(),free()和realloc()。
(1)calloc
void *calloc(size_t num, size_t size);
函数calloc()分配的内存量等于num*size,即calloc()为num个大小为size的数组分配足够内存。分配内存中的所有位被初始化为零。
calloc()返回一个指针,指向分得区域的第一字节。内存不足以满足请求时,返回空指针。因此,使用返回指针前,必须先检查它是否为空指针。
//返回指向动态分配的100个浮点数的指针#include <stdlib.h>#include <stdio.h>float *get_mem(){ float *p; p=calloc(100,sizeof(float)); if(!p){ printf("Allocation Error\n"); exit(1); } return p;}
(2)free
void free(void *ptr);函数free()向堆中返回ptr指向的内存,使内存可供将来再分配。
调用free()的指针必须是先前用动态分配系统函数()malloc(),realloc()及calloc())之一所分配而取得的。用无效指针调用free()可能摧毁内存管理机制,使系统瘫痪。
(3)malloc
void *malloc(size_t size);函数malloc()返回一个指针,指向从堆中分配的size字节内存区的首字节。堆中内存不足时,返回空指针。使用前,必须核实返回的指针不为空。否则将导致系统瘫痪。
(4)realloc
void *realloc(void *ptr, size_t size);操作后会分配一个新块,新块包含着与旧块(最大为传入的长度,用size表示)相同的内容。指向新块的指针被返回。新快和旧块可以从同一地址开始。因此realloc()返回的指针可以与传入ptr的指针相同。
如果ptr是空指针,则realloc()仅分配size字节的内存,并为其返回一个指针。
如果内存不足,则返回空指针,且原块不变。
#include <stdlib.h>#include <stdio.h>#include <string.h>int main(void){ char *p; //最初通过malloc()函数只分配17个字节 p = malloc(17); if(!p) { printf("Allocation Error\n"); exit(1); } strcpy(p, "This is 16 chars"); //通过realloc()函数将原内存扩大到18个字节,多出的一个字节用以存放句点 p = realloc(p, 18); if(!p) { printf("Allocation Error\n"); exit(1); } strcat(p, "."); printf(p); free(p); return 0;}
运行结果:
阅读全文
0 0
- C语言的动态分配函数
- 详解c语言中动态分配内存的函数
- C语言free()函数:释放动态分配的内存空间
- C语言的动态分配内存
- C语言中的realloc函数动态分配内存
- C语言中的realloc函数动态分配内存
- C语言malloc()函数:动态分配内存空间
- C语言malloc()函数:动态分配内存空间
- C语言动态分配内存的方法
- C 语言动态分配数组
- c语言存储动态分配
- 【C语言总结】动态分配
- C语言动态分配内存
- C语言动态分配内存
- C语言动态分配数组
- C语言--动态分配内存
- [华赛面试题] C语言动态分配内存 用指针实现字符串的函数体外打印
- 黑马程序员-C语言中内存动态分配函数的使用方法及注意事项
- git使用小手册
- c#中形参是引用类型但依然是值传递!!
- minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析
- ORB_SLAM2系列之二:ORB_SLAM2跑单目SLAM
- 647. Palindromic Substrings
- C语言的动态分配函数
- HDOJ--2188(巴什博奕)
- scrapy安装
- Unity3D
- java开发微信端获取code和opendId,access_token,用户列表
- python学习—Day33—综合复习第二弹
- NLP15-基于keras的中文情感挖掘试探
- (二十五)基础系列 io流
- 归并排序——史上最详细图解教程!!!