ConvertBSTRToString 内存泄露
场景:用ConvertBSTRToString出现的内存泄露有关问题
用ConvertBSTRToString出现的内存泄露问题
在一个函数中这么用
_bstr_t bstrstr = m_pRecordset-> Fields-> Item[l]-> Name;
char* cstr = _com_util::ConvertBSTRToString( bstrstr );
string sstr = cstr;
vec.push_back(sstr);
delete cstr;//如果这里不用delete则最后dump memory leak会发生内存泄露,
内存里的内容还是上面产生的字符串,详问这是怎么回事?
函数返回了之后:
_bstr_t ,string 类型的会自动释放
char* 是局部变量,也应该释放掉啊
------解决方案--------------------
ConvertBSTRToString allocates a string you must delete.
char* cstr是局部变量,但str所指向的内容并不会自动删除的。
------解决方案--------------------
你的方法很麻烦啊
_bstr_t bstrstr = m_pRecordset-> Fields-> Item[l]-> Name;
vec.push_back( string((LPCSTR)bstrstr) );
这样也不会有内存泄露了
------解决方案--------------------
why " allocates a string you must delete "
函数中分配了内存,返回指针,这个指针由调用函数者删除,有什么why的,就是这样子。
用ConvertBSTRToString出现的内存泄露问题
在一个函数中这么用
_bstr_t bstrstr = m_pRecordset-> Fields-> Item[l]-> Name;
char* cstr = _com_util::ConvertBSTRToString( bstrstr );
string sstr = cstr;
vec.push_back(sstr);
delete cstr;//如果这里不用delete则最后dump memory leak会发生内存泄露,
内存里的内容还是上面产生的字符串,详问这是怎么回事?
函数返回了之后:
_bstr_t ,string 类型的会自动释放
char* 是局部变量,也应该释放掉啊
------解决方案--------------------
ConvertBSTRToString allocates a string you must delete.
char* cstr是局部变量,但str所指向的内容并不会自动删除的。
------解决方案--------------------
你的方法很麻烦啊
_bstr_t bstrstr = m_pRecordset-> Fields-> Item[l]-> Name;
vec.push_back( string((LPCSTR)bstrstr) );
这样也不会有内存泄露了
------解决方案--------------------
why " allocates a string you must delete "
函数中分配了内存,返回指针,这个指针由调用函数者删除,有什么why的,就是这样子。