CString to TCHAR* ReleaseBuffer后指向GetBuffer的指针无意义

写一个小软件,中间涉及到了将 CString 转换为 TCHAR*

 

在网上搜到了函数 CString 的函数 GetBuffer()

 

然后用ReleaseBuffer释放缓冲区

 

这是我的部分代码

 

 UINT nSelNum = m_lcShow.GetNextItem(-1, LVNI_SELECTED);

 CString szProxyAdd = m_lcShow.GetItemText(nSelNum, 0),
  szProxyPort = m_lcShow.GetItemText(nSelNum, 1);

 TCHAR* pszProxyAdd = new TCHAR[19];
 TCHAR* pszProxyPort = new TCHAR[19];
 pszProxyAdd = szProxyAdd.GetBuffer(szProxyAdd.GetLength());
 pszProxyPort = szProxyPort.GetBuffer(szProxyPort.GetLength());

 m_iepProxy1.SetIEProxy(pszProxyAdd, pszProxyPort);

 szProxyAdd.ReleaseBuffer();
 szProxyPort.ReleaseBuffer();
 pszProxyAdd = NULL;
 pszProxyPort = NULL;

 

之前写的时候在

pszProxyAdd = NULL;
 pszProxyPort = NULL;

之前有

 delete[] pszProxyAdd;
 delete[] pszProxyPort;

 

结果函数一执行完,程序就报堆错误

 

本来以为是 SetIEProxy() 函数的错误,设断点调了半天都没找到错误

 

函数还重写了一遍,搞了近半个小时

 

毫无结果,后来灵感突来,google了一下        ReleaseBuffer  作用

 

找到了这个帖子

http://topic.csdn.net/t/20030324/21/1571461.html

 

顺藤到了msdn上

 

搜索了一下结果得到了如下代码段

 

{
    // ...
    enum {
        bufferSize = 1024
    };
    CSimpleString s( "abc", pMgr );

    LPTSTR p = s.GetBuffer(bufferSize);
    strcpy_s( p, bufferSize , "abc" );   // use the buffer directly
    _ASSERT( s.GetLength( ) == 3 ); // String length = 3
    s.ReleaseBuffer( );  // Surplus memory released, p is now invalid.
    _ASSERT( s.GetLength( ) == 3 ); // Length still 3
}

 

才发现错误,真TMD,哪有人这样写函数的,小小BS一下MS

 

不过只是想想也有点道理,内存都被delete了,指向它的指针确实没意义了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值