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

本文为数据结构打下基础

备注:数据结构需要掌握指针,结构体和动态内存管理

承接68.【C语言】动态内存管理(重点)(1)文章

目录

3.free函数

cplusplus网的翻译

提炼要点

使用

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

建议


3.free函数

cplusplus的介绍 点我跳转

cplusplus网的翻译

函数

free


void free (void* ptr);

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

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

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

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

参数


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

返回值


无(原因为void类型)

提炼要点

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

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

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,realloc)就有释放内存空间(free)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/55757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络:计算机网络概述:网络、互联网与因特网的区别

文章目录 网络、互联网与因特网的区别网络分类 互联网因特网基于 ISP 的多层次结构的互连网络因特网的标准化工作因特网管理机构因特网的组成 网络、互联网与因特网的区别 若干节点和链路互连形成网络&#xff0c;若干网络通过路由器互连形成互联网 互联网是全球范围内的网络…

信息安全工程师(40)防火墙技术应用

一、防火墙的基本概念 防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量&#xff0c;以保护网络免受未经授权的访问和攻击。它可以是装配多张网卡的通用计算机&#xff0c;也可能是通用的物理设备。防火墙通过在网络之间设置访问控制策略&#xff0c;对进出的通信流…

JAVA开源项目 加油站管理系统 计算机毕业设计

本文项目编号 T 003 &#xff0c;文末自助获取源码 \color{red}{T003&#xff0c;文末自助获取源码} T003&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

vue3中el-input在form表单按下回车刷新页面

摘要&#xff1a; 在input框中点击回车之后不是调用我写的回车事件&#xff0c;而是刷新页面&#xff01; 如果表单中只有一个input 框则按下回车会直接关闭表单 所以导致刷新页面 再写一个input 表单 &#xff0c;并设置style“display:none” <ElInput style"display…

[Python] 使用Python自定义生成二维码

文章目录 目录 安装 qrcode 库生成简单的二维码代码讲解 生成自定义样式的二维码代码讲解 生成带有链接的二维码代码讲解 Demo代码实现代码讲解 总结 收录专栏: [Python] 二维码是现在非常常用的一种信息存储和传递方式&#xff0c;我们可以通过扫描二维码来快速获取文本、链接…

论文精读之Label-Augmented Dataset Distillation (LADD)标签增强数据集蒸馏

[TOC](论文精度之Label-Augmented Dataset Distillation (LADD)标签增强数据集蒸馏) 0.前言 现在开始要不断培养我自身的阅读论文的能力,我的方法不一定是对的,但是不犯错的前提就在于要先犯错,提早去培养自己该方面的能力,其实很早之前就了解到了一些论文学习的方法,但自己总…

Redis 5 种基本数据类型的前两个详解

Redis 共有 5 种基本数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 这 5 种数据类型是直接提供给用户使用的&…

SAP ABAP 代码搜索工具 CODE_SCANNER

SAP ABAP 代码搜索工具 CODE_SCANNER 作为一个熟练的 ABAP 经常要查一下某个function有没有被别的程序调用&#xff0c;或者查看某个function在参考别的程序的调用方法。这就会经常用到 CODE_SCANNER 这个TCODE。 例子一&#xff1a;例如查询 某个smartform 被哪个程序调用了&…

网页打不开、找不到服务器IP地址

现象&#xff1a;网络连接ok&#xff0c;软件能正常使用&#xff0c;当网页打不开。 原因&#xff1a;DNS 配置错误导致网站域名无法正确解析造成。 影响DNS设置的&#xff1a;VPN软件、浏览器DNS服务选择、IPv4属性被修改。 1、VPN代理未关闭 2、浏览器DNS解析选择 3、以太…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【285-296】

文章目录 285. 为什么需要继承286. 继承原理图287. 继承快速入门288. 289. 290. 291. 292. 继承使用细节1,2,3,4,5288.1 继承给编程带来的便利288.2 继承的深入讨论/细节问题 293. 继承本质详解294. 继承课堂练习1295. 继承课堂练习2296. 继承课堂练习3 285. 为什么需要继承 28…

同城O2O系统源码与跑腿配送平台的架构设计与开发方案详解

今天&#xff0c;笔者将与您一同深入探讨同城O2O系统的源码及跑腿配送平台的架构设计与开发方案&#xff0c;助力开发者和企业在这一领域的实践与探索。 一、O2O系统概述 在同城O2O模式中&#xff0c;用户可以通过手机应用或网页平台下单&#xff0c;而配送员则根据订单信息迅…

[图形学]smallpt代码详解(1)

一、简介 本文介绍了著名的99行代码实现全局光照的光线跟踪代码smallpt。 包括对smallpt的功能介绍、编译运行介绍&#xff0c;和对代码的详细解释。希望能够帮助读者更进一步的理解光线跟踪。 二、smallpt介绍 1.smallpt是什么 smallpt(small Path Tracing) 是一个全局光照…

鸿蒙NEXT开始公测,哪些机型可以升级?鸿蒙版微信界面简洁

华为 Harmony OS NEXT 于10月8日正式开启公测&#xff0c;对鸿蒙 NEXT 系统感兴趣&#xff0c;想要第一时间尝鲜鸿蒙系统的话&#xff0c;千万不要错过本篇文章&#xff01; 哪些手机可以参与鸿蒙 NEXT 公测&#xff1f; 首批参与鸿蒙 NEXT 公测的机型有华为 Mate 60 系列、华…

Electron构建桌面应用程序,服务于项目的自主学习记录(持续更新...

无所畏惧地面对未知&#xff0c;并将其视为成长的机会 大纲官网快速入门1.安装node.js -- 这里推荐用nvm管理2.脚手架创建3.electron 包安装到应用的开发依赖4.创建主进程(main.js)并启动项目1.创建页面2.配置main.js3.启动项目 -- 效果 进阶 -- 基于项目场景功能使用场景一&am…

Java8新特性, 函数式编程及Stream流用法大全

用了多少年的java8了&#xff0c;Lambda表达式和stream流也经常用&#xff0c;但是也仅限于某些用法比较熟练&#xff0c;看见了 Function、Consumer 等函数式接口还是一脸懵逼&#xff0c;现在来全面总结一下java8这些新特性&#xff0c;也为自己后续查找做个备忘。如果你只是…

【C++】模板(初识):函数模板、类模板

本篇主要介绍C中的模板初阶的一些知识。模板分为函数模板和类模板&#xff0c;我们一个一个来看。 1.函数模板 1.1函数模板概念 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实际的参数类型产生函数特定版本。…

人工智能平台 PAI-DSW内置通义灵码实操

人工智能平台 PAI&#xff08;Platform for AI&#xff0c;原机器学习平台PAI&#xff09;是 AI Native 的大模型与 AIGC 工程平台&#xff0c;提供包含数据集管理、算力管理、模型工具链、模型开发、模型训练、模型部署、AI资产管理在内的功能模块&#xff0c;内置100种大模型…

JVS·智能BI数据可视化图表:普通列表与分组列表配置全解析

使用场景 在可视化配置中&#xff0c;很多场景中需要图形和详细信息的融合展示&#xff0c;那么在图表中可以新增普通列表与分组列表的配置。如下图所示&#xff1a; 配置说明 1、新增组件&#xff1a;配置入口如下图所示&#xff0c;新增组件时&#xff0c;选择普通列表与分…

前端vue-配置请求拦截器

1.配置拦截器&#xff0c;记得20行的导出 2.响应拦截器&#xff0c;记得28行的导出 3.拦截器不止可以拦截&#xff0c;还可以添加内容

Custom C++ and CUDA Extensions - PyTorch

0. Abstract 经历了一波 pybind11 和 CUDA 编程 的学习, 接下来看一看 PyTorch 官方给的 C/CUDA 扩展的教程. 发现极其简单, 就是直接用 setuptools 导出 PyTorch C 版代码的 Python 接口就可以了. 所以, 本博客包含以下内容: LibTorch 初步;C Extension 例子; 1. LibTorch …