小心使用_bstr_t类

PLL锁相环基础知识(一) 本文介绍了锁相环(PLL)的核心组件及其工作原理,重点阐述了压控振荡器(VCO)的结构与调谐机制。VCO作为PLL的关键部分,通过变容二极管实现频率调谐,但易受温度、电压等因素影响稳定性。文章详细讲解了VCO的谐振电路原理、硅基集成方案,以及通过分频器和调制器实现的频率控制技术。特别分析了整数型和分数型N分频器的差异,指出高阶德尔塔-西格玛调制器可有效降低分数杂散。文章还探讨了预分频器的应用及其对频率分辨率的影响,揭示了PLL通过反馈环路实现频率锁定的基本原理。 阅读详情

在编写代码的时候用到_bstr_t这个类,调试代码过程中发现结果出人意料。

写了下面三句代码进行测试,发现bstr1、bstr2、bstr3三个变量执行到最后地址指向同一个地方,值都是"ijkl"。   
BSTR bstr1  = _bstr_t(L"abcd");
BSTR bstr2  = _bstr_t(L"efgh");
BSTR bstr3  = _bstr_t(L"ijkl");

再改成下面语句测试,发现bstr1还是等于bstr3,值为"ijkl",但bstr2却正常了,等于"efghabcd",好像和字符串长度有关。
BSTR bstr1  = _bstr_t(L"abcd");
BSTR bstr2  = _bstr_t(L"efghabcd");
BSTR bstr3  = _bstr_t(L"ijkl");

 

_bstr_t(xxx)返回的是_bstr_t的内部指针,可能会随时更改的.........
应该:
BSTR bstr1  = _bstr_t(L"abcd").copy();
BSTR bstr2  = _bstr_t(L"efgh").copy();
BSTR bstr3  = _bstr_t(L"ijkl").copy();

 

对于 BSTR bstr1  = _bstr_t(L"abcd").copy();
这是通过SysAllocStringLen分配新的内存。
用完需要 SysFreeString(bstr1);

 

_bstr_t(L"abcd"); 这只是临时构造了一个_bstr_t对象,该构造函数内会通过SysAllocString来给BSTR分配内存。
在把BSTR的指针返回给 bstr1 之后,就会释放_bstr_t这个临时对象,在其析构函数里就把分配给BSTR的内存释放了。

在执行_bstr_t(L"efgh"); 又临时构造一个,这个时候,没有别的申请过内存,_bstr_t临时对象内给BSTR分配的内存又是上一次给的那块内存。并把内容更改 efgh。
也就是bstr2 指向的内存和 bstr1变量指向的内存地址 是相同的。

_bstr_t(L"ijkl"); 的过程也是一样,最终三者指向的内存地址是一样的。


对于后面那种情况,因为第二个的字符串长度长了,分配的内存刚好在另外一个位置了。
而给第三个bstr分配内存刚好在第一个的原来位置

 

 

【华为OD技术面试真题 - 技术面】- python面试题(1) 华为OD面试技术面准备指南 华为OD面试技术面常见问题解答 华为OD面试技术面经验分享 华为OD面试技术面注意事项 华为OD面试技术面攻略 华为OD面试技术面模拟题目与解析 华为OD面试技术面知识点梳理 华为OD面试技术面常考 阅读详情

相关推荐

别再到处找资源了!WinCC 7.5 SP2官方下载与Windows 10保姆级安装避坑指南

本文提供了WinCC 7.5 SP2在Windows 10上的官方下载与安装全流程指南,重点解决了资源获取难、系统兼容性问题及分卷压缩处理等常见痛点。通过详细的步骤和实用技巧,帮助用户顺利完成安装并优化配置,适用于工控领域的学习者和从业者。

weixin_32924297的博客 477

如何使用BSTR

BSTR是一种字符串指针,如果你在VC找寻其定义,你会发现它其实是unsigned short*,然而它不能像普通的字符串指针char*一样可以直接赋值,而必须使用SysAllocString来分配,用SysFreeString来释放。 另外,又有两个BSTR的包容类_bstr_t和CComBSTR,它们是为了编程者使用BSTR更加方便,因为在他们的构造函数中都调用了SysAllocStri

静水幽深的空间 1162

数据预处理的分箱操作

数据分箱 介绍 我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险。尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化。而特征离散化处理通常采用的就是分箱法,数据分箱(也称为离散分箱或分段)是一种数据预处理技术,用于减少次要观察误差的影响,提高泛化性。 数据分箱又分为有监督分箱和无监督分箱,是否使用标签进行离散化(分箱)决定了有监督还是无监督的离散化方法。 知识点 无监督分箱 split 分箱 merge 分箱 无监督分箱 这里为了

随笔记 5333

CString.AllocSysString(),BSTR,_bstr_t的内存泄露

从百度百科里可以知道 CString.AllocSysString()的内存释放是通过SysFreeString()函数来进行,今天在使用一个第三方库的时候有下列语句导致了内存泄露 构造函数 CString name; _bstr_t m_name = name.AllocSysString(); 析构函数 ::SysFreeString(m_name); 究其原因是

wzb198606的专栏 2760

3D视觉引导技术在机器人焊接中的应用

通过对比传统的2D视觉和3D视觉技术在焊接领域的应用差异,探讨了3D视觉引导技术在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势。本文对3D视觉引导技术在机器人焊接中的应用进行了深入探讨,总结了其在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势,并通过应用案例展示了其在焊接路径规划、焊缝检测和焊接质量控制等方面的重要作用。1. 提高焊接精度:3D视觉引导技术能够精确测量焊接工件的三维形状和位置,为机器人提供精准的焊接路径规划和跟踪,从而提高焊接精度。三、3D视觉引导技术概述。

2302_79273122的博客 1836

Python控制tek示波器(1)

如何使用Python来控制tek示波器

m0_47441496的博客 3379

BSTR 分配和释放内存

bstr 赋值 智能指针 析构函数

qq_33031421的博客 476

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

深山技术宅的博客 1855

BSTR用法详解

BSTR详解  BSTR 详解一 - BSTR 简介和内部结构 1          Why need BSTR COM 是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。 ·                     C++ 字符串是以 0 结束的 ASCII 或 Unicode 字符数组 ·                     Vi

如果爱下去的专栏 8633

PVE虚拟机运行不流畅,出现卡顿。

🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 3063

C++ getline函数详解与示例代码

每次调用函数时,会读取一行文本,并将其存储在字符串对象中。在循环中,我们检查读取到的文本是否为空行,如果是则跳出循环,否则输出读取到的文本。这个函数在处理用户输入、文件读取等场景中非常有用,希望能对您的C++编程有所帮助。函数是一个常用的字符串输入函数,可以用于从输入流中读取一行文本。首先,我们输出提示信息,要求用户输入一行文本。函数会等待用户输入,并将输入的文本存储在。函数从输入流中读取一行文本,并将其存储在字符串对象。这样,当用户输入制表符时,函数会停止读取。函数的用法,并提供相应的示例代码。

LogicGuruX的博客 827

_bstr_t与BSTR

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34221036的博客 285

PMP--工件

合同是指对双方都有约束力的协议,强制卖方提供规定的产品、服务或结果,以及强制买方支付相应的费用。它还可能包括处于中间状态的特性,例如已设计但尚未构建的特性、质量保证中的特性或测试中的特性。RACI 矩阵是一种常见的方法,用于显示执行、担责、咨询或知情,且与项目活动、决策和可交付物有关的干系人。计划是提议的实现某种目标的方式。在项目开始前或开始时创建的文件,涉及与项目有关的战略、商业或高层级的信息。或 © 它们是用特定方法创建的结果,例如,虽然成本估算结果是一个重要工件,它们是用不同估算方法得出的结果。

stqer的博客 1666

char*,wchar_t*,CString和BSTR之间的转换

前言 本文并不尝试列举出所有的转换方法,只列举作者认为方便易用的方法。 1.char*和wchar_t*的相互转换 可以利用中间类_bstr_t(头文件comdef.h)方便的进行相互转换 const wchar_t* wText = (_bstr_t)"测试"; char* cText = (_bstr_t)L"测试"; 可以通过A2T,A2W,T2...

diaomo9737的博客 421

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

_bstr_t使用陷阱

_bstr_t使用陷阱在使用的时候我们可以定义一个变量_bstr_t strTest; 然后会这样赋值(或者使用宽字符的形式):strTest = ""; strTest = "test";然后我们有另外的字符串类,比如stl中wstring,我们定义一个变量wstring stlStr; 然后通过赋值操作stlStr = strTest将strTest的值赋给stlStr,一切正常。但是有些时

asd467672767的专栏 2798

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

忍不住还是要发篇文章:关于VC6中(VARIANT)BSTR传入传出发生RtlSizeHeap(user breakpoint at address)的问题

As it turns out, I was able to determine why I was getting this RTLSizeHeap problem. Being a novice to COM and ATL, I had a class that stored a string (_bstr_t) value. As you would expect, I had the n

tiewen的专栏 3363

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

wchar_t 宽字符集 研究 和COM的 BSTR VARIANT

  wchar_t 是和 char 平等的地位,即 wchar_t 并非 typedef出来的,是原生的变量。 简单的说,它拥有两个字节,和short 占用空间一样。 比如: 字符串 "我们\n" ANSI 的十六进制为:ce d2 c3 c7 0A 00 6个字节,其中包括字符串最后的\0 Unicode十六进制为:11 62 EC 4E 0A 00 00 00 8个字节,所有的...

weixin_33811961的博客 168

CppCon 2018 学习:These Aren‘t the COM Objects You‘re Looking For

使用RAII方法管理 COM 可以确保 COM 在正确的时机被初始化,并且在作用域结束时自动释放资源。类让你无需手动管理 COM 初始化和清理,简化了代码,也提高了安全性。这个方法可以有效避免线程上下文问题,减少内存泄漏风险,是一种非常好的实践。OLECHAR是WCHAR(宽字符类型)的别名,表示 Unicode 字符。BSTR是一个指向OLECHAR的指针,即一个指向 Unicode 字符的指针。BSTR是 COM 中专门设计的字符串类型,它包含长度前缀、数据字符串和终止符。你需要通过和。

虾球 944

ATL X2X字符串转换宏【谨慎使用】

#include TCHAR *W2T_(WCHAR *lpw) { USES_CONVERSION;//调用ATL的x2x宏的时候别忘这句 return W2T(lpw); } //TCHAR 转 BSTR TCHAR *tstr = "BSTR字符串,释放了没有,不然内存爆死你!"; BSTR *bstr = T2BSTR(tstr); SysFreeString(bstr); /

objectively的专栏 954

C++字符串完全指南(2) - 总结

C++字符串完全指南(2) - 总结 字符串类的打印格式函数 对字符串包装类使用printf()或其它类似功能的函数时要特别小心。包括sprintf()函数及其变种,以及TRACE 和ATLTRACE 宏。它们的参数都不做类型检验,一定要给它们传递C语言字符串,而不是整个string对象。 例如,要向ATLTRACE()传递一个_bstr_t 里的字符串,必须显式用(LPCS

zhanghaifeng1419的专栏 604

ComBSTR的使用

ComBSTR的使用 用 CComBSTR 进行编程 Visual Studio .NET 2003 3(共 3)对本文的评价是有帮助-评价此主题 ATL 类CComBSTR提供对BSTR数据类型的包装。尽管CComBSTR是一个有用的工具,但有一些情况需要特别小心。 转换问题 范围问题 ...

bianchengjingling22的博客 106

转载推荐:COM中不同字符类型相互转换,例如char*, BSTR, CString等等

原文链接如下: http://vip.6to23.com/louis228/techPapers/convertstring.htm 当然,文中类型转换汉书所涉及的头文件并没有一一列举出来,比如_bstr_t所涉及到的<comdef.h>头文件,_com_util::*所涉及到的<comutil.h>及其静态链接库文件comsupp.lib等 //#pragma co...

weixin_30311605的博客 70

浅谈windows的各种字符串(转载)

作者:Froser 链接:https://zhuanlan.zhihu.com/p/56306408 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 说起Windows下的编程,可能大家的印象都是:微软从来都“特立独行”,什么都要来自己的一套,连类型都不例外。C语言下预设的一些基本类型,微软几乎都typedef过,如BYTE,WORD,DWORD等。那么,今天我们来简单聊聊Windows编...

Sum7mer 1154
上一篇: 如何利用Flash控件捕获到swf文件的每一帧数据?
下一篇: 容器类作为全局成员不妥
sheltonwan
博客等级 码龄20年 77粉丝 79原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值