C语言13-动态内存分配
1. 常用函数
这些函数在stdlib.h头文件中
1.1 malloc()
作用:申请一片连续的空间,返回的是这片空间的首地址
使用:
1 | malloc(size_t_Size) |
示例:
1 | int* p = malloc(100 * sizeof(int)); //申请一片空间存储100个int类型的整数,这种写法比较聪明 |
1.2 calloc()
作用:申请空间+数据初始化
使用:
1 | calloc(size_t_Count,size_t_Size) |
示例:
1 | int* p = calloc(10, sizeof(int)); |
1.3 realloc()
作用:修改空间大小
使用:
1 | realloc(指针,size_t_Size) |
示例:
1 | int* p = malloc(100 * sizeof(int)); |
1.4 free()
作用:释放空间
示例:
1 | int* p = malloc(100 * sizeof(int)); |
申请的空间不用了,一定要记得释放
2. 常用函数的细节点
2.1 malloc
malloc()创建空间的单位是字节
malloc()返回的是void类型的指针,没有步长的概念,也无法获取空间中的数据,需要强转
具体方法:
int* p = (int*)malloc(size)
实际上不强转也行,前面用int,C语言底层会帮进行类型转换
malloc()返回的仅仅是首地址,没有总大小,最好定义一个变量记录总大小;申请失败返回NULL
malloc申请的空间不会自动消失,如果不能正确释放,会导致内存泄露
malloc申请的空间过多,会产生虚拟内存,赋值了才会变成真的
malloc申请的空间没有初始化值,需要先赋值才能使用
2.2 其他三个函数
free释放完空间之后,空间中的数据叫做脏数据,可能被清空,可能被修改为其他数据
calloc就是在malloc的基础上多一个初始化的动作
realloc修改之后的空间,地址值有可能发生变化,也有可能不会改变,但是原本的数据不会丢失,如果内存中已经无法申请空间了,会返回NULL
realloc修改之后,无需释放原来的空间,函数底层会进行处理
3.C语言的内存结构
- 指针加双引号定义的字符串放在常量区
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 zyw4259!
评论