CComBSTR使用中-1异常

 .NET 2005中对很多类在实现细节上都做了很大改动,上一篇说了map中用于插入部分的改变,这里再说一个关于CComBSTR类的。COM编程中,CComBSTR是很有用的一个BSTR包装类,用于跨平台处理字符串。它的构造函数有几个,其中一个接受整型参数。

          CComBSTR (

             int nSize

          );

 

实现代码如下

        CComBSTR(__in int nSize)

        {

                if (nSize == 0)

                        m_str = NULL;

                else

                {

                        m_str = ::SysAllocStringLen(NULL, nSize);

                        if (!*this)

                        {

                                AtlThrow(E_OUTOFMEMORY);

                        }

                }

        }

因此,如果nSize==-1,则程序抛出异常,导致程序中断。个人感觉nSize==0应改为nSize<1好一些,这样把任何非负的数都作为空字符串处理。此处在判断逻辑上有瑕疵,导致错误的报告内存分配错误问题(::SysAllocStringLen(NULL, 1)合法,返回NULL)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值