c语言中的动态内存管理
在 C 语言中,动态内存管理主要通过以下几个函数实现:
一、malloc 函数
功能: malloc 函数用于在内存的动态存储区中分配一块长度为 size 字节的连续区域。函数返回一个指向分配区域起始地址的指针,如果分配失败则回 NULL
示例:

二、calloc 函数
功能: calloc 函数用于在内存的动态存储区中分配 n 个长度为 size 字节的连续区域,并将分配的内存初始化为 0。函数返回一个指向分配区域起始地址的指针,如果分配失败则返回 NULL 。
示例:

三、realloc 函数
功能: realloc 函数用于调整先前由 malloc 、 calloc 或 realloc 分配的内存块的大小。新的大小由 size 指定。如果新大小大于旧大小,可能会移动内存块以提供更多空间;如果新大小小于旧大小,可能会截断内存块,但不会释放多余的空间。函数返回一个指向调整后内存块起始地址的指针,如果分配失败则返回 NULL 。
示例:

四,free函数
在 C 语言中, free 函数用于释放动态分配的内存空间。
一、函数原型
void free(void *ptr);
它接受一个参数 ptr ,这是一个指向要释放的内存块的指针。这个指针应该是之前通过 malloc 、 calloc 或 realloc 函数分配的内存的地址。
二、使用方法
例如:

三、注意事项
1. 确保只释放已分配的内存:传递给 free 的指针必须是由动态内存分配函数返回的有效指针,否则可能会导致未定义的行为。
2. 避免重复释放:对同一内存块多次调用 free 可能会导致错误,应该确保只释放一次内存。
3. 释放后避免继续使用指针:释放内存后,指针仍然指向原来的内存地址,但该内存已经不可用。为了避免错误,最好将指针设置为 NULL 。
在 C 语言中,使用动态内存管理时常见的错误有以下几种:
一、内存泄漏
- 表现:申请了动态内存但没有在合适的时候释放,导致内存资源一直被占用,随着程序的运行,可能会耗尽系统。
二、悬空指针
表现:指针指向的内存被释放后,指针没有被置为 NULL 或重新赋值,继续使用该指针会导致未定义行为。
-示例:
void danglingPointerExample()
{
int *ptr = (int *)malloc(sizeof(int));
free(ptr);
// 这里 ptr 成为悬空指针
int value = *ptr; // 错误,未定义行为
}
三、重复释放
- 表现:对同一块已经释放过的内存再次调用 free 函数,可能会导致程序崩溃或其他不可预测的结果。
- 示例:
void doubleFreeError()
{
int *ptr = (int *)malloc(sizeof(int));
free(ptr);
// 再次释放
free(ptr);
}
四、内存越界访问
- 表现:通过指针访问超出动态分配内存范围的地址,可能会破坏其他内存区域的数据,导致程序出现错误。
- 示例:
void outOfBoundsAccess()
{
int *ptr = (int *)malloc(5 * sizeof(int));
// 访问超出分配内存范围的地址
ptr[10] = 20;
free(ptr);
}
相关文章:
c语言中的动态内存管理
在 C 语言中,动态内存管理主要通过以下几个函数实现: 一、malloc 函数 功能: malloc 函数用于在内存的动态存储区中分配一块长度为 size 字节的连续区域。函数返回一个指向分配区域起始地址的指针,如果分配失败则回 NULL 示例: …...
生信机器学习入门4 - scikit-learn训练逻辑回归(LR)模型和支持向量机(SVM)模型
通过逻辑回归(logistic regression)建立分类模型 1.1 逻辑回归可视化和条件概率 激活函数 (activation function): 一种函数(如 ReLU 或 S 型函数),用于对上一层的所有输入进行求加权和,然后生…...
COD论文笔记 Adaptive Guidance Learning for Camouflaged Object Detection
论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点如下: 动机: 论文的核心动机是解决伪装目标检测(COD)中的挑战性任务。伪装目标检测旨在识别和分割那些在视觉上与周围环境高度相似的目标,这对于计算…...
9.5LeetCode
80.删除有序数组重复项II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…...
数据仓库系列13:增量更新和全量更新有什么区别,如何选择?
你是否曾经在深夜加班时,面对着庞大的数据仓库,思考过这样一个问题:“我应该选择增量更新还是全量更新?” 这个看似简单的选择,却可能影响整个数据处理的效率和准确性。今天,让我们深入探讨这个数据仓库领域…...
数据 结构(内核链表)
一、内核链表(是一个有头双向循环链表) 1.内核提供的两个宏 (1) offsetof : 获取结构体成员到结构体开头的偏移量; (2) contianer_of : 通过偏移量获取结构体首地址; 2.代码示例: truct passager *create_passage…...
学习node.js十三,文件的上传于下载
文件上传 文件上传的方案: 大文件上传:将大文件切分成较小的片段(通常称为分片或块),然后逐个上传这些分片。这种方法可以提高上传的稳定性,因为如果某个分片上传失败,只需要重新上传该分片而…...
【刷题笔记】删除并获取最大点数粉刷房子
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 题目一 题目链接:删除并获取最大点数 思路: 预处理状态表示 状态转移方程 代码如下: class Solution { public:int deleteAndEarn(vector<int>& nums) {int N1…...
【Linux 从基础到进阶】Elasticsearch 搜索服务安装与调优
Elasticsearch 搜索服务安装与调优 引言 Elasticsearch 是一个分布式的、基于 RESTful API 的搜索和分析引擎,专为快速处理大量数据而设计。它经常被用来进行全文搜索、日志和指标分析等操作。本文将介绍如何在 CentOS 和 Ubuntu 系统上安装 Elasticsearch,并进行必要的调优…...
IMU助力JAXA空间站机器人
近日,日本宇宙航空研究开发机构(JAXA)宣布,在国际空间站(ISS)实验舱“希望号”(Kibo)上部署的一款移动摄像机器人将采用Epson M-G370系列惯性测量单元(IMU)。…...
java开发,记录一些注解和架构
最近接了一个项目,说是项目其实也不算是项目,因为是把这个项目赛到其他项目中的。 熟悉一些这个项目的功能,梳理了一下,在代码开发中主要关心pojo、entity、respository、controller、service。 在这里主要记录前3个的流程与作用…...
【2024高教社杯全国大学生数学建模竞赛】B题 生产过程中的决策问题——解题思路 代码 论文
目录 问题 1:抽样检测方案的设计问题 2:生产过程中的决策问题 3:多工序、多零配件的生产决策问题 4:重新分析次品率题目难度分析1. 统计检测方案设计的复杂性(问题 1)2. 多阶段生产决策的复杂性(…...
JUnit 5和Mockito进行单元测试!
1. JUnit 5 基础 JUnit 5是最新的JUnit版本,它引入了许多新特性,包括更灵活的测试实例生命周期、参数化测试、更丰富的断言和假设等。 1.1 基本注解 Test:标记一个方法为测试方法。 BeforeEach:在每个测试方法之前执行。 AfterEac…...
LeetCode 算法:完全平方数 c++
原题链接🔗:完全平方数难度:中等⭐️⭐️ 题目 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的…...
深入CSS 布局——WEB开发系列29
CSS 页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。 一、正常布局流(Normal Flow) CSS的布局基础是“正常流”,也就是页面元素在没有特别指定布局方式时的默认排列…...
视频的容器格式和编码格式详解
视频的容器格式和编码格式是视频文件的两个核心概念,它们相互关联但具有不同的功能。以下是详细的解释: 1. 容器格式 (Container Format) 容器格式,又称封装格式,指的是视频文件的外壳或容器,它用于封装视频、音频、…...
Elasticsearch Mapping 详解
1 概述 映射的基本概念 Mapping 也称之为映射,定义了 ES 的索引结构、字段类型、分词器等属性,是索引必不可少的组成部分。 ES 中的 mapping 有点类似与DB中“表结构”的概念,在 MySQL 中,表结构里包含了字段名称,字…...
WPF 利用视觉树获取指定名称对象、指定类型对象、以及判断是否有验证错误
1.利用视觉树获取指定名称对象 /// <summary> /// Finds a Child of a given item in the visual tree. /// </summary> /// <param name"parent">A direct parent of the queried item.</param> /// <typeparam name"T">T…...
了解`re`模块的`split()`, `sub()`, `subn()`方法的作用
在Python中,re模块(即正则表达式模块)提供了强大的字符串处理能力,允许你通过模式匹配来执行复杂的文本搜索、替换和分割等操作。其中,split(), sub(), 和 subn() 方法是re模块中非常实用的几个函数,它们各…...
机器学习交通流量预测实现方案
机器学习交通流量预测实现方案 实现方案 1. 数据预处理 2. 模型选择 3. 模型训练与评估 代码实现 代码解释 小结 🎈边走、边悟🎈迟早会好 交通流量预测是机器学习在智能交通系统中的典型应用,通常用于预测道路上的车辆流量、速度和拥…...
HBuilderX真机调试报错找不到android_base.apk?别慌,3个方法帮你快速搞定(附详细路径)
HBuilderX真机调试报错找不到android_base.apk?3种实战解决方案详解 遇到HBuilderX真机调试时控制台突然报错"未查找到基座位置plugins\launcher\base\android_base.apk",这确实会让开发者措手不及。这个错误通常发生在首次尝试连接安卓设备进…...
为什么开发者都在使用go-cursor-help?5步掌握Cursor无限试用技巧
为什么开发者都在使用go-cursor-help?5步掌握Cursor无限试用技巧 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Your request has been blocked as our system has detected suspicious activity / Youve reached your trial reque…...
数据中心母线槽选型指南——面向数据中心配电场景的智能母线系统
引言在数据中心供配电系统中,母线槽作为电力传输的关键基础设施,承担着将电力从变配电设备输送至各类用电设备的重要职责。随着数据中心规模扩大与供电可靠性要求提升,传统电缆方案在维护、监测与扩展性方面的局限日益凸显。成都高标电气有限…...
终极jPlayer版本迁移指南:从2.7到2.9的完整升级方案与最佳实践
终极jPlayer版本迁移指南:从2.7到2.9的完整升级方案与最佳实践 【免费下载链接】jPlayer jPlayer : HTML5 Audio & Video for jQuery 项目地址: https://gitcode.com/gh_mirrors/jp/jPlayer jPlayer作为最流行的jQuery HTML5音频视频播放器库,…...
高效备份QQ空间历史数据:GetQzonehistory的本地化解决方案
高效备份QQ空间历史数据:GetQzonehistory的本地化解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心多年积累的QQ空间说说会因账号异常或平台政策调整而永…...
JMS, ActiveMQ 学习一则唾
开发个什么Skill呢? 通过 Skill,我们可以将某些能力进行模块化封装,从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。 这里我打算来一次“套娃式”的实践:创建一个用于自动生成 Skill 的 Skill,一是用…...
番茄小说下载器完整使用指南:免费下载保存任何小说
番茄小说下载器完整使用指南:免费下载保存任何小说 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 番茄小说下载器是一款功能强大的开源工具,专门用于批量下载和保存…...
Adobe-GenP:创意工具普惠化的技术破局实践
Adobe-GenP:创意工具普惠化的技术破局实践 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 一、问题象限:创意产业的授权困境与技术挑战 1.1…...
STM32 串口通信入门:printf 重定向 + 调试技巧
作为STM32新手,串口通信是嵌入式调试的万能钥匙。很多新手调试程序时,只能靠LED亮灭判断运行状态,出错后无从排查;想查看变量、确认函数执行情况,也没有有效方法。串口通信可解决这一问题,通过printf函数&a…...
CustomTkinter:如何用Python轻松打造现代化桌面应用界面
CustomTkinter:如何用Python轻松打造现代化桌面应用界面 【免费下载链接】CustomTkinter A modern and customizable python UI-library based on Tkinter 项目地址: https://gitcode.com/gh_mirrors/cu/CustomTkinter 厌倦了传统Tkinter老旧的界面风格&…...
