建设网站的费用/完善的seo网站

建设网站的费用,完善的seo网站,网站建设论文二稿,游戏是怎么开发出来的欢迎拜访:雾里看山-CSDN博客 本篇主题:C语言动态内存管理(下) 发布时间:2025.3.18 隶属专栏:C语言 目录 动态内存常见错误内存泄漏(Memory Leak)典型场景后果解决方案 悬挂指针(Dangling Pointe…

欢迎拜访:雾里看山-CSDN博客
本篇主题:C语言动态内存管理(下)
发布时间:2025.3.18
隶属专栏:C语言

在这里插入图片描述

目录

  • 动态内存常见错误
    • 内存泄漏(Memory Leak)
      • 典型场景
      • 后果
      • 解决方案
    • 悬挂指针(Dangling Pointer)
      • 错误示例
      • 深层原理
      • 修复方案
    • 双重释放(Double Free)
      • 危险操作
      • 系统表现
      • 防护措施:
    • 越界访问(Out-of-Bounds)
      • 典型错误
      • 内存影响
    • 未初始化访问
      • 问题代码
      • 随机性危害
      • 防御性编程
    • 释放栈区内容
      • 错误示例
      • 解决方案
    • 未全部释放
      • 错误示例
      • 解决方案
  • C/C++程序的内存开辟

动态内存常见错误

内存泄漏(Memory Leak)

典型场景

void process_data() {int* buffer = malloc(1024 * sizeof(int));// 忘记调用 free(buffer)
}

后果

  • 程序持续运行时会不断消耗内存
  • 长期运行的服务可能因此崩溃

解决方案

  • 遵循申请与释放成对出现原则
  • 使用RAII模式(C可用__attribute__((cleanup))扩展)

悬挂指针(Dangling Pointer)

错误示例

int* create_int() {int value = 42;return &value; // 返回局部变量地址
}int main() {int* ptr = create_int();printf("%d", *ptr); // 不可预测结果
}

深层原理

  • 栈帧销毁后,原地址可能被其他数据覆盖
  • 堆内存释放后若未置空,指针仍保存失效地址

修复方案

及时释放,释放后立即置空

free(ptr);
ptr = NULL; // 立即置空

双重释放(Double Free)

危险操作

对同一地址空间进行多次释放

char* str = malloc(64);
free(str);
free(str);

系统表现

  • 可能立即引发segmentation fault
  • 可能破坏堆管理结构导致后续malloc失败

防护措施:

  • 使用释放后置空的编程规范
  • 在复杂逻辑中明确资源所有权

越界访问(Out-of-Bounds)

典型错误

数组只开辟了[0,4]的空间,访问时却访问了下标为5的空间。

int* arr = malloc(5 * sizeof(int));
for(int i=0; i<=5; i++) { // 索引0-4有效arr[i] = i; // i=5时越界
}

内存影响

  • 可能覆盖相邻内存的控制信息
  • 可能修改其他变量值导致逻辑错误

未初始化访问

问题代码

内存开辟出来未进行初始化就直接访问。

int* p = malloc(sizeof(int));
printf("%d", *p);

随机性危害

  • 可能意外修改关键内存区域
  • 在不同运行环境中表现不一致

防御性编程

指针定义时显示初始化, 指针使用时进判空。

int* p = malloc(sizeof(int));
*p = 10;
printf("%d", *p);

释放栈区内容

错误示例

对于非动态开辟出来的内存进行释放

void test()
{int a = 10;int *p = &a;free(p);
}

解决方案

  • 遵循申请与释放成对出现原则
  • 使用RAII模式(C可用__attribute__((cleanup))扩展)

未全部释放

错误示例

在释放内存的时候,创建时的指针和原来的指针已经不在同一个位置,直接释放则会有内存错误。

void test()
{int *p = (int *)malloc(100);p++;free(p);
}

解决方案

在创建的时候,使用一个指针记录起始位置,

void test()
{int *p = (int *)malloc(100);int *ptr=p;p++;free(ptr);
}

C/C++程序的内存开辟

在这里插入图片描述
C/C++程序内存分配的几个区域:

  1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
  2. 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分配方式类似于链表。
  3. 数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。
  4. 代码段:存放函数体(类成员函数和全局函数)的二进制代码。

实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。
但是被static修饰的变量存放在数据段(静态区),数据段的特点是在上面创建的变量,直到程序结束才销毁所以生命周期变长。

⚠️ 写在最后:以上内容是我在学习以后得一些总结和概括,如有错误或者需要补充的地方欢迎各位大佬评论或者私信我交流!!!

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

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

相关文章

Vue:Vue2和Vue3创建项目的几种常用方式以及区别

前言 Vue.js 和 Element UI 都是用 JavaScript 编写的。 1、Vue.js 是一个渐进式 JavaScript 框架。2、Element UI 是基于 Vue.js 的组件库。3、JavaScript 是这两个项目的主要编程语言。 而Element Plus是基于TypeScript开发的。 一、Vue2 1、基于vuecli工具创建 vue2 …

机器人曲面跟踪Surface-Tracking

定义 机器人曲面跟踪&#xff08;Surface-Tracking&#xff09;是指机器人通过实时感知工件曲面的三维形貌&#xff0c;动态调整运动轨迹和位姿&#xff0c;以精确跟随曲面进行加工&#xff08;如打磨、抛光、喷涂等&#xff09;的技术。 力 - 位姿协同控制 力控模式&#xff…

【AVRCP】蓝牙协议栈深度解析:AVCTP互操作性核心机制与实现细节

目录 一、事务标签&#xff08;Transaction Label&#xff09;机制 1.1 事务标签核心规则 1.2 事务标签作用域与并发性 1.3 实现建议与陷阱规避 1.4 协议设计思考 1.5 调试与验证 二、消息分片&#xff08;Fragmentation&#xff09;机制 2.1 分片触发条件 2.2 分片支…

harmonyOS NEXT开发与前端开发深度对比分析

文章目录 1. 技术体系概览1.1 技术栈对比1.2 生态对比 2. 开发范式比较2.1 鸿蒙开发范式2.2 前端开发范式 3. 框架特性对比3.1 鸿蒙 Next 框架特性3.2 前端框架特性 4. 性能优化对比4.1 鸿蒙性能优化4.2 前端性能优化 5. 开发工具对比5.1 鸿蒙开发工具5.2 前端开发工具 6. 学习…

OpenWebUI:一站式 AI 应用构建平台体验

&#x1f680; 大家好&#xff0c;今天给大家分享一个超棒的 AI 应用构建工具——OpenWebUI&#xff01;体验下来&#xff0c;只能说丝滑&#xff01;必须强烈推荐&#xff01; &#x1f525; 听说过阿里巴巴的 Qwen 吗&#xff1f;他们最新的 Qwen Chat 网站就是用 OpenWebUI…

多线程—进程与线程

1 进程 1.1 进程概念 进程&#xff1a;操作系统提供的一种抽象&#xff0c;当程序在运行时&#xff0c;好像计算机的所有硬件资源都在为其服务。换言之&#xff0c;进程就是程序的一次运行过程。进程是操作系统分配资源的基本单位。 注意&#xff1a;区分进程和程序&#xff0…

ssm框架之mybatis框架动态SQL

1 mybatis动态sql mybatis可以通过各种各样的标签在sql映射文件中实现如下功能 1、语句的动态拼接 2、前后缀格式处理 3、复杂参数处理 常用标签如下&#xff1a; 1.1 if标签 如下示例&#xff0c;当有一个入参为null或者空的时候的时候&#xff0c;不参与计算&#xff0c;…

poetry使用

1.初始化 package name 填入口文件名 poetry init2.在本目录下虚拟 poetry config virtualenvs.in-project true 3.自动生成依赖文件和vent虚拟环境&#xff0c;管理本项目下载包 poetry add flask pandas numpy 4 4.下载依赖 poetry install 5.查看都安装了什么包 poe…

Compose 的产生和原理

引言 compose 出现的目的&#xff1a; 重新定义android 上ui 的编写方式。为了提高android 原生ui开发效率。让android 的UI开发方式跟上时代。 正文 compose 是什么&#xff1f; 就是一套ui框架 和flutter 一样是一套ui框架 Flutter&#xff1a;跨平台开发趋势与企业应用的…

【计算机网络】一二章

一 二 非常棒的例子 相同的传播时延&#xff0c;带宽越大&#xff0c;该链路上所能容纳的比特数越多 相同的传播时延&#xff0c;带宽越大&#xff0c;该链路上所能容纳的比特数越多 往返时间&#xff08;Round-Trip Time&#xff0c;RTT&#xff09;s是指从发送端发送数据分组…

微软OneNote无法同步解决方案

目录 前言原因UWP特性 解决方案C***h注册表 参考链接 前言 假设有多台Windows电脑&#xff0c;最方便且免费的多设备笔记同步方案就是微软自家的OneNote&#xff0c;使用OneDrive自带的5G云存储。 但是在国内大陆的OneNote&#xff0c;经常会出现无法同步、同步失败&#xff1…

《商业智能(BI)的演进:从数据仓库到智能决策》

01、什么是商业智能BI&#xff1f; 商业智能BI - 派可数据商业智能BI可视化分析平台 首先要了解什么是商业智能BI&#xff08; Business Intelligence &#xff09;&#xff1f;百度商业智能BI有很多很多官方的定义&#xff0c;各种解释&#xff0c;实际上从这么多年的经验出发…

云钥科技工业相机定制服务,助力企业实现智能智造

在工业自动化、智能制造和机器视觉快速发展的今天&#xff0c;工业相机作为核心感知设备&#xff0c;其性能直接决定了检测精度、生产效率和产品质量。然而&#xff0c;标准化工业相机往往难以满足复杂多样的应用场景需求&#xff0c;‌工业相机定制‌逐渐成为企业突破技术瓶颈…

API调用大模型推理与第三方API实现业务整合

基于Python实现大模型推理与第三方API调用的集成&#xff0c;需要结合Function Call机制与提示词工程。 一、技术架构设计 双阶段流程 推理阶段&#xff1a;大模型解析用户意图&#xff0c;生成结构化API调用指令执行阶段&#xff1a;Python代码解析指令并触发第三方API # 示例…

Java面试:集合框架体系

一、ArrayList 1.数组&#xff08;Array&#xff09; 是一种用连续的内存空间存储相同数据类型数据的线性数据结构 数组如何获取其他元素的地址值&#xff1f; 寻址公式&#xff1a;a[i] baseAddress i * dataTypeSize baseAddress&#xff1a;数组的首地址dataTypeSize&am…

麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程

1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题&#xff0c;为保障系统安全&#xff0c;需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4&#xff0c;以规避潜在风险&#xff0c;提升系统整体的安全性和稳定性。 1.1 本…

微软开源神器OmniParser V2.0 介绍

微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具&#xff0c;旨在将用户界面&#xff08;UI&#xff09;截图转换为结构化数据&#xff0c;从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型&#xf…

DLMS电能表通讯协议学习笔记

本文是对于IEC62056协议族&#xff0c;即DLMS协议族的中文说明手册。本文并没有包含DLMS协议族的全部&#xff0c;但解释了在应用中可能出现的大多数情况。本文的目的是为电能量数据采集终端提供与使用DLMS协议族的电能表通讯的协议说明。 本文参考文献如下&#xff1a; &#…

browser_use 自动化浏览器agent使用案例

参考&#xff1a; https://github.com/browser-use/browser-use/tree/577e15c963f7e3c499aac312ecb8da6e1f4733fe 浏览器启动后&#xff0c;页面一直空白问题解决&#xff1a; https://github.com/browser-use/browser-use/issues/986 安装&#xff1a; pip install browser…

stable-diffusion-webui-docker 构建 comfy-ui

Ubuntu 安装 stable-diffusion-webui-docker 常见问题处理方法 这篇文章介绍了在 Ubuntu 上安装 stable-diffusion-webui-docker&#xff0c;运行 docker compose --profile auto up --build 构建出的界面是 stable-diffusion-webui&#xff0c;如果运行 docker compose --prof…