堆内存的分配和释放
来源:互联网 发布:node buffer 编辑:程序博客网 时间:2024/06/03 23:47
malloc
free
示例int i = 10;int *p = (int *)malloc(sizeof(int)) // 在堆中分配一个整数大小的内存.printf("%p, %d\n", &i, i);printf("%p, %d\n", p, *p);free(p); // 必须要手动释放堆内存.特殊示例:int main(){ char *s = null; test(s); print("%s\n", s);}void test(char *p){ p = malloc(sizeof(char) * 10); strcpy(p, "hello");}打印结果:null原因:s指针指向的是空地址->空地址赋值给p->p指向了一个新的堆地址->p进行字符串赋值->s还是指向的空地址->打印字符串s结果为nullint main(){ char *s = malloc(sizeof(char) * 10); test(s); print("%s\n", s);}void test(char *p){ strcpy(p, "hello");}打印结果:helloint main(){ char *s = null; test(&s); print("%s\n", s);}void test(char **p){ *p = malloc(sizeof(char) * 10); strcpy(*p, "hello");}打印结果:hello解析:s指向了空地址->s将自己的地址传递给p->*p申请堆空间(s的值也就指向了堆空间)->*p赋值(相当于s进行字符串赋值)->输出字符串
calloc
calloc(size, sizeof(int))
calloc(4, sizeof(int)) // calloc会将自动分配的内存清0
相当于:
malloc(4 * sizeof(int)) // 分配的内存不会清0
memset(p, 0, 4 * sizeof(p) // 手动清0
int i[10] = {0};
memset(i, 0, sizeof(i)) // 分配的数组内存清0
实现动态分配内存:#include <stdio.h>#include <string.h>#include<stdlib.h>void init_array(char *s);void add_array(char *s);char *array = NULL;int main(int argc, char *argv[]){ init_array("hello"); add_array(argv[1]); printf("%s\n", array); free(array); return 0;}void init_array(char *s){ // 初始化之前必须要释放. free(array); if (s != NULL) { array = malloc(strlen(s) * sizeof(char) + 1); strcpy(array, s); }}void add_array(char *s){ if (array == NULL) { init_array(s); } else { int lenArr = strlen(array); int lenS = strlen(s); char *temp = malloc((lenArr + lenS) * sizeof(char) + 1); temp[lenArr + lenS] = 0; for (int i = 0; i < lenArr; i++) { temp[i] = array[i]; } for (int i = 0; i < lenS; i++) { temp[lenArr + i] = s[i]; } free(array); array = temp; }}
realloc()
重新分配内存地址
array = realloc(array, a+b+1)
void add_arrary_new(char *s){ if (s == NULL) return ; if (array) { int a = strlen(array); int b = strlen(s); // 重新分配内大小. array = realloc(array, a + b + 1); memset(array + a, 0, b + 1) strcpy(&array[a], s); }}
阅读全文
0 0
- 堆内存的分配和释放
- 堆内存分配与释放
- 内存分配和释放
- 内存分配和释放
- 内存分配和释放
- 内存分配和释放
- 内存的堆分配和栈分配
- 内存的堆分配和栈分配
- 内存的堆分配和栈分配
- 内存的堆分配和栈分配
- 内存的堆分配和栈分配
- 变量的内存分配和释放
- 分配和释放 BSTR 的内存
- 分配和释放 BSTR 的内存
- 分配和释放 BSTR 的内存
- 变量的内存分配和释放
- 内存的分配管理和释放
- 变量的内存分配和释放
- Java-Json的格式化和转参数表格
- 学习maven的使用,看到一篇很实用的入门教程(菜鸟级入门)
- C语言字符串操作总结大全(超详细)
- CentOS搭建ShowDoc文档工具
- 程序设计入门——Java入门作业(第三周)
- 堆内存的分配和释放
- leetcode-Two Sum
- jsp+servlet
- 第十单元
- IT相關推薦--YouTube
- 搭建Kubernetes集群搭建跳坑
- JS基本数据类型
- 线程安全
- PreparedStatement的setDate方法如何设置日期