首页 > 系统相关 >C++常见内存错误及其对策

C++常见内存错误及其对策

时间:2024-08-27 12:27:05浏览次数:15  
标签:释放 C++ 对策 越界 内存 使用 NULL 指针

常见内存错误及其对策

目录

在软件开发过程中,内存管理是至关重要的一环。内存错误不仅会导致程序崩溃,还可能引发安全问题。本文将详细介绍几种常见的内存错误及其对策。

内存分配未成功,却使用了它

这是编程新手常犯的错误,因为他们往往没有意识到内存分配可能会失败。对策是在分配内存后立即检查指针是否为NULL。如果指针p是函数的参数,在函数的入口处使用assert(p!=NULL)进行检查。如果是使用mallocnew申请内存,应该用if(p==NULL)进行防错处理。

内存分配成功但未初始化

内存分配成功后,如果没有进行初始化,可能会导致错误的数据引用。内存的缺省初值并没有统一标准,因此无论使用何种方式创建数组,都应该为其赋初值。

内存操作越界

在使用数组时,很容易发生下标越界的情况,尤其是在for循环中,循环次数设置错误会导致数组操作越界。

内存泄漏

如果忘记了释放内存,每次函数调用都会丢失一块内存,最终可能导致内存耗尽。动态内存的申请与释放必须配对,确保mallocfree的使用次数相同,newdelete同理。

释放内存后继续使用

释放内存后继续使用内存的情况有三种:

  1. 对象调用关系复杂,难以管理,需要重新设计数据结构。
  2. 函数的return语句错误,返回了指向栈内存的指针或引用。
  3. 使用freedelete释放内存后,没有将指针设置为NULL,导致产生“野指针”。

规则总结

以下是针对内存管理的一些基本规则:

  • 规则1:使用mallocnew申请内存后,立即检查指针是否为NULL。
  • 规则2:不要忘记为数组和动态内存赋初值。
  • 规则3:避免数组或指针的下标越界。
  • 规则4:动态内存的申请与释放必须配对。
  • 规则5:使用freedelete释放内存后,立即将指针设置为NULL。

图表示

内存错误及其对策 内存分配未成功 内存未初始化 内存越界 内存泄漏 释放内存后使用 检查指针是否为NULL 为数组赋初值 避免下标越界 申请与释放配对 重新设计数据结构 正确使用return语句 释放后设置指针为NULL

C++学习资料

以下是我学习C++觉得不错的资料,仅供学习使用:
匠心精作C++从0到1入门编程-学习编程不再难
链接: https://pan.baidu.com/s/1q7NG28V8IKMDGD7CMTn2Lg?pwd=ZYNB 提取码: ZYNB
点击下载
第二套、侯捷老师全系列八部曲 - 手把手教你进阶系列
链接: https://pan.baidu.com/s/1AYzdguXzbaVZFw1tY6rYJQ?pwd=ZYNB 提取码: ZYNB
点击下载
C++电子书
链接:https://pan.baidu.com/s/1odQObyuA6ubW6mQ8mAr1Xg
提取码:ZYNB
点击下载

标签:释放,C++,对策,越界,内存,使用,NULL,指针
From: https://blog.csdn.net/ZY52678/article/details/141598192

相关文章

  • c++教程之三大结构
    C++顺序结构教程在编程的世界里,顺序结构是构建所有程序的基础。无论是简单的脚本还是复杂的应用程序,它们都是由一系列按照特定顺序执行的指令组成的。C++,作为一种高效、灵活的编程语言,同样遵循这一原则。本教程将深入介绍C++中的顺序结构,包括变量与数据类型、运算符与表达式、......
  • C++笔记9•list•
    容器之list1.list的介绍(1).list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。(2).list的底层是双向循环链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。(3).优......
  • C++学习 — 函数
    目录1.概述2.函数的定义3.函数的调用4.值传参5.函数的常见样式6.函数的声明7.函数的分文件编写8.函数默认参数 9.函数占位参数10.函数重载(1)函数重载概述(2)函数重载注意事项1.概述作用:将一段经常使用的代码封装起来,减少重复代码   一个较大的程序,一般......
  • 深入理解GPU内存分配:机器学习工程师的实用指南与实验
    给定一个模型架构、数据类型、输入形状和优化器,你能否计算出前向传播和反向传播所需的GPU内存量?要回答这个问题,我们需要将流程分解为基本组件,并从底层理解内存需求。以下实验(可以在GoogleColab上运行)将帮助你理解核心概念。 数据类型float32需要4字节的内存,bfloat......
  • 202009-1 称检测点查询 csp c++组
    a数组记录距离平方值,其最大为2000的平方,不超int。b数组记录3个距离最小的坐标。ans记录下标。每次选出一个坐标后其距离置为最大值。include<bits/stdc++.h>typedeflonglongll;usingnamespacestd;intmain(){intn,x,y,x1,y1,j,minx,b[3],cnt=0,i,ans;inta[210......
  • C/C++开发神器CLion全新发布v2024.2——更适用于嵌入式开发
    CLion是一款专为开发C及C++所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OSX和Windows上来开发C/C++,同时它还使用智能编辑器来提高代码质量、自动代码重构并且深度整合CMake编译系统,从而提高......
  • 不懂金融也别愁,选对策略 ETF 投资翻倍不难
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:    你是不是听身边的朋友讲述其投资美股赚钱的经历,可自己却对这方面无从下手?别担心,本文将为您介绍如何借助投资美国金融市场的ETF来实现财富增值。首先,我会阐述ETF的基本概念以及一些ETF投资的实......
  • C++码表之Unicode
    今日诗词:折花逢驿使,寄与陇头人。江南无所有,聊赠一枝春。                     ——《赠范晔诗》【南北朝】陆凯引言:上一期我们说到了ASCII码表,这是一种现如今不是那么通用的机制,随着计算机的普及,越来越多的人开始学习计算机,深......
  • C++容器之字符串的详解
    每日诗词:我见青山我妩媚,料青山见我应如是。                             ——《贺新郎·甚矣吾衰矣》【宋】辛弃疾目录补漏:vector在分配新内存块后如何进行元素复制正文:字符串变量和常量字符串变量:解析:......
  • 学习C++的阶段总结
    每日诗词:盛气光引炉烟,素草寒生玉佩。应是天仙狂醉,乱把白云揉碎。                        ——《清平乐·画堂晨起》【唐】李白目录月末学习总结展望和感谢通知我的目标是:共同进步下期预告:搞定C++指针;更新时间:待定......