2023-12-29 C++薄弱知识点整理(C++内存部分)(3)

1.函数返回值使用指针(不会用)

  (1) 不要返回函数局部变量或临时变量的地址(该地址如果期间被其他变量征用,会导致结果出现各种不认识的值)

正确方法: 

例:

int * add(int x,int y){

             int *sum = NULL;

             sum = new int;

             *sum = x+y;

             return sum;

}

int main(){

        int a = 3;

        int b = 4;

        int *sum = NULL;

        sum = add(a,b);

        cout<<"sum = "<<*sum<<endl;

        delete sum;        //动态内存分配记得归还

}

(2)!! 返回静态局部变量的地址    没有    问题

2.内存常见错误总结[很多bug都是由于代码量巨大,遗忘部分操作后造成的]

(1)申请的内存多次释放:只允许释放一次

(2)内存泄漏:申请的动态内存没释放

(3)释放的内存不是申请时的地址:在进行一系列的指针操作后,指针可能已经不是最初申请动态内存的首地址了

(4)释放空指针:以为在代码运行中指针被赋值了,但是如果程序赋值那步出现了判定错误,

没有执行该语句,在下面释放指针时,就会出现错误

(5)释放一个内存块,但是继续引用其中的内容

(6)越界访问:动态内存也相当于一个数组,可能在对指针多次操作的过程中造成了越界访问

注:动态数组初始化:memset(指针,0,元素数量*sizeof(元素类型));

3.内存泄漏检测

内存泄漏检测工具:VisualC++ debugger 和CRT库

第一步:包含头文件

#define_CRTDBG_MAP_ALLOC

#include<stdlib.h>

#include<crtdbg.h>

第二步:接管new操作符

#ifdef DEBUG

#ifndef DBG_NEW

#define DBG_NEW new(_NORMAL_BLOCK,_FILE_,_LINE_)

#define new DBG_NEW

#endif

#endif

第三步:在代码结束处输出内存泄露信息

_CrtDumpMemoryLeaks();

内存泄漏工具:

Windows:Purify,BoundsCheaker,Deleaker,VisualLeak Detector,

Linux: Valgrind,memcheck

注:用完记得把这些代码删掉

  

  

  • 30
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值