首页 > 系统相关 >Windows下平台release debug下内存释放的差异

Windows下平台release debug下内存释放的差异

时间:2023-09-04 09:47:50浏览次数:42  
标签:Windows int 内存 析构 debug release bodys

今天遇到了这个问题,代码如下:

 

int test1(int* n, int**const bodys)
{
    if (n == nullptr || bodys == nullptr)
    {
        return -1;
    }
    *n = 3;
    std::vector<int >nums= {1, 2, 3};
    *bodys = &nums[0];
    return 0;
}

int main(void)
{
    int n = 0;
    int *bodys=NULL;
    test1(&n,&bodys);
    int d = *bodys++;
    
    return 0;
}

vector是个局部变量,函数输出了他的地址,按照道理,函数结束之后,地址就失效了。但是在外面居然可以正常访问这个地址(release下),值是对的,没有析构,我验证了之后发现debug下,发现值是正常析构的。

所以我合理怀疑,release下编译器做了优化,它只把内存还给了操作系统,但是并没有对vector的每个元素执行析构,所以值还是有效的,但是下次再分配这段内存已经被标记成未使用了,所以还会分配到,所以这个地址指向的值是不靠谱的。

给我两个启示

1调试代码多用debug ,release 隐藏了许多问题

2写函数的时候很多用到二级指针,再函数内部要用new来分配内存,函数调用者负责析构,调用delete来析构

标签:Windows,int,内存,析构,debug,release,bodys
From: https://www.cnblogs.com/eddygo/p/17676078.html

相关文章

  • Tenable Nessus 10.6.0 (Unix, Linux, Windows) - #1 漏洞评估解决方案
    TenableNessus10.6.0(Unix,Linux,Windows)-#1漏洞评估解决方案发布Nessus试用版自动化安装程序,支持macOSVentura、RHEL9和Ubuntu22.04请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgNessus漏洞评......
  • 使用mount -t cifs 挂载windows共享目录
    <p>1.在windows10上新建共享文件夹,比如VMF,然后设置该文件夹的属性,</p><p>VMF文件夹-->属性-->共享-->设置共享-->添加用户(可以新增用户,设置密码)设置读写属性。</p><p><imgsrc="https://img2023.cnblogs.com/blog/1736150/202305/1736150-20230512141028798-1883433899......
  • 初三学生编写网页版 Windows 12
    初三学生编写网页版Windows12来源:OSCHINA编辑: 局2023-09-0316:13:00 7一名初三学生用前端开发三件套——HTML+CSS+JavaScript实现了一个网页版的Windows12。他表示在网上看到Windows12概念版(PoweredbyPowerPoint)后深受启发,因此决定做一个W......
  • fastadmin xdebug调试
    1、配置一个phpinfo.php文件;2、安装xdebug插件打开https://xdebug.org/wizard,将phpinfo.php源代码,复制到文本输入框,xdebug会分析出php环境配置,然后按照说明安装即可。注意:端口最好不要用9000,不然会跟Nginx冲突3、修改vscode配置文件---->首选项---->设置,点击:在settings.json......
  • Windows基本命令
        echo>写入的话是覆盖>>是续写 ......
  • 大数据开发-解决Windows下,开发环境常遇的几个问题
    发士大夫大数据开发-解决Windows下,开发环境常遇的几个问题1.背景大数据开发的测试环境,很多人不以为然,其实重复的打包,上传,测试虽然每次时间大概也就几分钟,但是积累起了往往会花费很多的时间,但是一个完整的测试环境在生产环境下往往难形成闭环,抛开堡垒机权限不说,hadoop,hive,spark......
  • Windows与网络基础——虚拟机镜像相关
    1.虚拟机Windows10安装硬盘分区时,先新建分区,再格式化在启动此电脑——管理——本地用户和组 向下箭头代表为禁用开机状态快照占用内存大于关机状态快照2.虚拟机WindowsServer2016安装要桌面的话,需要选择桌面体验版Server版本的WINDOWS需要给管理员设置密码,且具备复杂性,......
  • Windows下编译FFmpeg
    Windows下在编译前需要修改环境变量,确保有这两个变量INCLUDE以及PKG_CONFIG_PATH除此之外,我们还对编出来的库有些其它要求,例如,库名中不能有版本号相关的信息,修改configurewin32|win64)disablesymverifenabledshared;then#Linktot......
  • 设置Windows10暂停更新3000天
    1、运行cmd,执行以下命令:regadd“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”/vFlightSettingsMaxPauseDays/treg_dword/d3000/f2、到更新设置里面设置暂停更新:   ......
  • Lnton 羚通算法算力云平台在环境配置中 Windows10-YOLOv8 运行报错是什么原因
    在配置Windows10环境下运行YOLOv8时,报错可能有多种原因。以下是一些可能导致错误的常见原因:缺少依赖项:YOLOv8可能需要一些额外的依赖项,如OpenCV、CUDA、cuDNN等。请确保你已经正确安装了这些依赖项,并且版本与YOLOv8的要求相匹配。文件路径错误:检查你的文件路径是否正确。确保模型......