C语言 ——— 常见的动态内存错误(上篇)

news2024/11/28 22:38:09

对NULL指针的解引用操作

代码演示:

int* ptr = (int*)malloc(sizeof(int) * INT_MAX);
*ptr = 10;
free(ptr);

代码解析:

使用 malloc 函数动态开辟 sizeof(int)*INT_MAX 这么多个字节的空间,而 INT_MAX 是整型类型的最大值,那么肯定会开辟失败,开辟失败就会返回空指针(NULL)

但是开辟失败后没有进行判断,直接对 ptr 指针解引用并且赋值为10,对空指针解引用的话,程序会直接报错,因为空指针没有任何指向的空间,解引用后系统也不知道该指向哪块空间,所以程序会报错

代码验证:

代码改正: 

int* ptr = (int*)malloc(sizeof(int) * INT_MAX);

// 判断释放开辟成功
if (ptr == NULL)
{
	// 报错并结束程序
	perror("malloc");
	return -1;
}
else
{
	*ptr = 10;
	free(NULL);
}

代码验证:

这样就避免了直接对空指针解引用操作


对动态开辟空间的越界访问 

代码演示: 

int* ptr = (int*)malloc(sizeof(int) * 10);

// 判断是否开辟成功
if (ptr == NULL)
{
	perror("malloc");
	return -1;
}

for (int i = 0; i <= 10; i++)
{
	ptr[i] = i; //当i是10的时候就是越界访问
}

free(ptr);

代码解析:

malloc 函数开辟了 10 个 int 类型的动态空间,并且 ptr 指针指向了起始位置,那么 *(ptr + 0) 表示的是找到了 ptr 所指向的第一个 int 空间的地址,并解引用,那么 *(ptr + 1) 表示的是找到了 ptr 所指向的第二个 int 空间的地址,并解引用

以此类推,ptr[i] = i; 也就是从 ptr 起始位置开始解引用后赋值为 i ,当 i 的值是 0~9 时,刚好就遍历完了 ptr 所指向的 10 个 int 类型的动态空间,但当 i 的值是 10 时,就越界访问了,程序就会报错

代码验证:

代码改正: 

int* ptr = (int*)malloc(sizeof(int) * 10);

// 判断是否开辟成功
if (ptr == NULL)
{
	perror("malloc");
	return -1;
}

for (int i = 0; i < 10; i++)
{
	ptr[i] = i; //当i是10的时候就是越界访问
}

free(ptr);

对非动态开辟内存使用free释放 

代码演示: 

int a = 10;
int* pa = &a;

// 对非动态开辟内存使用free释放 
free(pa);

代码验证:

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

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

相关文章

优化WAN流量:如何通过调整系统设置降低企业网络成本

一、症状与问题背景 当电脑显示空闲状态时&#xff0c;如果满足以下条件&#xff0c;第二拨号链接可能会意外激活&#xff1a; 您正在使用基于 Microsoft Windows 的计算机&#xff0c;该计算机连接到远程网络并且是 Active Directory 域服务 (AD DS) 域的成员。 您通过二级…

jpg怎么转换成pdf?6个简单方法,实现jpg转换成pdf

你是否也曾想将jpg图片转换为pdf格式文档呢&#xff1f;亦或者在处理文档或制作报告时&#xff0c;不知道怎么才能更快地将多张图片整合成一个pdf文件呢&#xff1f;如果你正在寻找简单快速的方法&#xff0c;又有哪些工具可以帮助您完成图片转pdf呢&#xff1f;别着急&#xf…

Windows服务器部署基于【若依管理系统】开发的项目

&#x1f3af;导读&#xff1a;本文档详述了基于前后端分离的若依系统&#xff08;版本3.8.8&#xff09;在Windows环境下从零开始的部署流程&#xff0c;包括JDK、Redis、MySQL等环境的搭建与配置。前端部署涉及Vue项目构建、图片优化及利用Nginx托管&#xff1b;而后端则涵盖…

猫咪掉毛严重如何清理?希喂,霍尼韦尔宠物空气净化器实测分享

随着养宠人群的增多&#xff0c;市场关注到铲屎官们的需要&#xff0c;带来了新的科技产品——宠物空气净化器。宠物空气净化器是在普通空气净化器基础上&#xff0c;调整服务对象&#xff0c;为吸附宠物毛发而设计的。不少消费者被它的功能所吸引&#xff0c;打算购入使用。然…

带你速通C语言——函数(11)

在 C 语言中&#xff0c;函数是组织代码的重要方式&#xff0c;它们允许我们将代码划分为可重用的模块&#xff0c;每个模块执行特定的任务。函数的使用有助于代码的清晰性和维护性&#xff0c;也是编写结构化程序的基本构建块之一。 1.函数的基本组成 在 C 中定义函数时&…

Agentic Security:一款针对LLM模型的模糊测试与安全检测工具

关于Agentic Security Agentic Security是一款针对LLM模型的模糊测试与安全检测工具&#xff0c;该工具可以帮助广大研究人员针对任意LLM执行全面的安全分析与测试。 请注意 Agentic Security 是作为安全扫描工具设计的&#xff0c;而不是万无一失的解决方案。它无法保证完全防…

八爪鱼现金流-034,实际使用,资产折线图

每个月发工资后&#xff0c;记账月报。 回顾资产折线图。 比较大的波动&#xff0c;一次是22年2月左右贷款买房。一次是24年8月宝宝出生。 孩子开销太大。呜呜呜。 话说&#xff0c;这个折线图&#xff0c;能不能加一个标签或者备注呢&#xff1f; 这个需求功能稍后我研究一…

【STM32 HAL库】寻迹小车 开环控制 状态机 TB6612+TCRT5000+HC-05

【STM32 HAL库】寻迹小车 开环控制 状态机 TB6612TCRT5000HC-05 前言硬件硬件准备模块说明主控 APM32F103VBT6核心板DC/DC降压模块TB6612电机驱动TCRT5000红外循迹模块HC-05蓝牙透传模块 代码逻辑宏观框架状态机 框架测试微观模块电机模块循迹模块蓝牙控制模块 前言 碎碎念一下…

keepalived安装-centos7

一、yum安装 1、安装Keepalived&#xff1a; yum install -y keepalived 2、启动Keepalived服务&#xff1a; systemctl start keepalived 3、设置Keepalived服务开机自启 systemctl enable keepalived 4、检查Keepalived服务状态&#xff1a; systemctl status keepal…

VAuditDemo常规漏洞

VAuditDemo常规漏洞 一、留言类功能漏洞 messageDetail.php - 存在数字型SQL注入&#xff0c;反射型XSS SQL注入 sqlwaf修改措施 反射型XSS messageSub.php search.php - 存在反射型xss 二、用户操作类漏洞 1、登录功能 logCheck.php - 空验证码绕过漏洞 2、编辑用户信息类 upd…

秘密指南!浮毛会危害人体健康吗?宠物空气净化器帮助解决危害

每当立秋一到&#xff0c;对于我这样的重度鼻炎患者而言&#xff0c;无疑是又一轮掉毛季的预警。家中猫咪的毛发仿佛永远扫不尽&#xff0c;皮屑也无处不在&#xff0c;让人头疼不已。好在&#xff0c;两年前我采纳了宠物医生的建议&#xff0c;用上了宠物空气净化器&#xff0…

Element-plus el-input 添加图标

案例图 根据官方文档来&#xff0c;我们需要先注册图标并应用到全局。 import { createApp } from "vue" import App from "./App.vue"const app createApp(App) //创建VUE对象import * as ElementPlusIconsVue from "element-plus/icons-vue"f…

竞争和冒险

竞争和冒险 文章目录 竞争和冒险总结 产生原因 数字电路中&#xff0c;信号传输与状态变换时都会有一定的延时。 在组合逻辑电路中&#xff0c;不同路径的输入信号变化传输到同一点门级电路时&#xff0c;在时间上有先有后&#xff0c;这种先后所形成的时间差称为竞争&#xf…

【方法】如何给ZIP压缩文件添加密码?

如果想要保护ZIP压缩文件不被他人随意打开&#xff0c;可以设置密码保护&#xff0c;那要如何设置呢&#xff1f;下面推荐两种方法&#xff0c;一起来看看吧&#xff01; 方法1&#xff1a; 如果想在压缩文件的时候&#xff0c;同时设置密码&#xff0c;可以使用WinRAR或者7-…

Qt 系统相关 - 文件

目录 1. 文件概述 2. 输入输出设备类 3. 文件读写类 4. 文件和目录信息类 1. 文件概述 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。 Qt 提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操作&#x…

04.震动控制灯

vibrate 的意思就是震动 #include "reg52.h" #include <intrins.h>sbit led1 P3^7; sbit vibrate P3^3;void Delay2000ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 15;j 2;k 235;do{do{while (--k);} while (--j);} while (--i); }void main()…

1块钱的家用桶装水抽水泵方案开发

目录 背景介绍需求分析 背景介绍 2024年8月&#xff0c;接到惠州大亚湾客户一个开发桶装水的一个PCB方案开发&#xff0c;要求成本控制在1万套&#xff0c;Bom成本在一块钱。 说干就干&#xff0c;先在网上搜索一下目前市面上的方案。 需求分析 想这种传统的桶装水是手动的…

DVWA综合靶场漏洞讲解

目录 综合靶场漏洞讲解 Brute Force Low Medium High Command Injection Low Medium High File Inclusion Low,Medium,High File Upload Low Medium High SQL Injection Low Medium High SQL Injection (Blind) Low Medium High XSS&#xff08;DOM&am…

未来购物新境界:商品样机3D展示可视化引领潮流

在这个日新月异的数字时代&#xff0c;科技的每一次飞跃都在深刻改变着我们的生活方式&#xff0c;尤其是购物体验。从传统的实体店选购到线上商城的便捷浏览&#xff0c;再到如今商品样机3D展示可视化的兴起&#xff0c;消费者正逐步踏入一个前所未有的沉浸式购物新时代。 想象…

layui table表单 checkbox选中一个其它也要选中

当我们选中其中一个商品的时候同类型的商品状态也要跟着改变 所以要在表单加载完成后去监听checkbox ,done:function (res) {console.log(详情表格数据,res)tableDetailList res.data;// 监听表格复选框选择table.on(checkbox( INST_SELECTORS.instLayFilters.unpaidTableDe…