当前位置: 首页 > news >正文

69.【C语言】动态内存管理(重点)(2)

目录

3.free函数

cplusplus网的翻译

提炼要点

使用

x86+debug环境下, 打开内存窗口

建议


3.free函数

cplusplus的介绍 点我跳转

cplusplus网的翻译

函数

free


void free (void* ptr);

释放内存块
之前通过调用malloc来分配一块内存,calloc和recalloc是来释放内存块的,让内存块可以用于后续的分配

如果ptr指针不指向通过上述函数分配的内存块,会导致为未定义行为

如果ptr指针为空,该函数不作任何处理

注意到函数不自己改变ptr的值,因此函数仍然指向同一个位置(现在无效)

参数


ptr:指向之前被malloc,calloc或recalloc分配的内存块

返回值


无(原因为void类型)

提炼要点

1.free函数用来释放动态开辟的内存

2.参数ptr指向的空间为malloc,calloc或recalloc开辟的空间

3.如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的

禁止这样写:

#include <stdio.h>
#include <stdlib.h>
int main()
{int a = 0;int* p = &a;free(p);
}

4.如果参数ptr是NULL指针,则函数不做任何处理

5.使用free函数要加#include <stdlib.h>

使用

#include <stdio.h>
#include <stdlib.h>
int main()
{int* p = (int*)malloc(20);if (p != NULL){*p = 1;printf("%d", *p);return 0;}else{perror("malloc");return 1;}free(p);
}

x86+debug环境下, 打开内存窗口

执行完int* p = (int*)malloc(20);后输入p

执行完*p = 1; 再次查看

执行完free(p);再次查看

指针p的值没有变化,而且free函数不对之前分配的内存空间赋新值,只是交换给操作系统,因此没有变化

建议

1.虽然free函数没有改变指针的值,但建议手动为p赋NULL,否则为野指针(对之前开辟的内存空间没有使用权限)

2.有分配内存空间(,malloc,calloc,recalloc)就有释放内存空间(free)


http://www.mrgr.cn/news/42519.html

相关文章:

  • 【60天备战2024年11月软考高级系统架构设计师——第36天:系统安全设计——数据加密】
  • 【微服务】负载均衡 - LoadBalance(day4)
  • 我与世界的联系---读书
  • 【MySQL】Ubuntu环境下MySQL的安装与卸载
  • IEC104规约的秘密之六----配置参数k,w
  • 数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)
  • 基于Springboot+Vue的在线项目管理与任务分配中的应用 (含源码数据库)
  • 2024软件测试面试大全(含答案+文档)
  • 2024最新软件测试面试八股文
  • 基础算法--枚举
  • 第18场小白入门赛(蓝桥杯)
  • TryHackMe 第6天 | Web Fundamentals (一)
  • NIM简单实践-图像分割
  • 【基础算法总结】链表篇
  • 3174、清除数字
  • vue3实现excel文件预览和打印功能
  • Leetcode 1498. 满足条件的子序列数目
  • 【路径规划】基于人工势场(APF)算法、Vortex APF算法、Safe APF算法和动态 Windows 方法的比较
  • linux基础指令的认识
  • 如何使用ssm实现中学生课后服务的信息管理与推荐+vue