SysAllocString, SysFreeString
.....Заранее благодарен
Такая проблема. Заметил что при выполнении одной опрерации в программе активно поедается и не освобождается память. Все проверил- утечек быть не должно. Грешу на операцию SysAllocString, это функция вызывается тут многократно. Дак вот вопросы: если я при этом не вызываю SysFreeString что произойдет? Обязательно ли это нужно делать чтоб освобождать память? И что делать если эти строки я передаю в качестве возвращаемых значений - нужно их очищать там куда они передаются?
.....Заранее благодарен
Конечно нужно вызывать SysFreeString... Но зачем так мучаться, если у нас есть bstr_t?
Конечно нужно вызывать SysFreeString... Но зачем так мучаться, если у нас есть bstr_t?
Посмотрел в MSDN про этот _bstr_t... Решение проблемы не обнаружил.
Если кокретнее то проблема такая: приведу код
///
VARIANT vOut;
VariantInit(&vOut);
vOut.vt= VT_BSTR;
CString s;
s.Format("%i",...);//тут что-то кладется в строку
vOut.bstrVal = s.AllocSysString();
hr=SafeArrayPutElement(m_ValuesArray.parray,&lDimension,&vOut);
VariantClear(&vOut);
....
m_ValuesArray - глобальная переменная
и уже потом после выполнения других операций с этим массивом вызываю SafeArrayDestroy
Дак вот. Нашел в том же MSDN, что VariantClear
если увидит строку - её очищает.
А что поотношению к SafeArrayDestroy? - если элементы массива строки, очистит ли он их сам, либо нужно каждый элемент перебирать и очищать его руками?
Посмотрел в MSDN про этот _bstr_t... Решение проблемы не обнаружил.
Если кокретнее то проблема такая: приведу код
///
VARIANT vOut;
VariantInit(&vOut);
vOut.vt= VT_BSTR;
CString s;
s.Format("%i",...);//тут что-то кладется в строку
vOut.bstrVal = s.AllocSysString();
hr=SafeArrayPutElement(m_ValuesArray.parray,&lDimension,&vOut);
VariantClear(&vOut);
....
m_ValuesArray - глобальная переменная
и уже потом после выполнения других операций с этим массивом вызываю SafeArrayDestroy
Дак вот. Нашел в том же MSDN, что VariantClear
если увидит строку - её очищает.
А что поотношению к SafeArrayDestroy? - если элементы массива строки, очистит ли он их сам, либо нужно каждый элемент перебирать и очищать его руками?
Вообще говоря, в хорошо написанной программе не должно быть операторов delete, SysFreeString и т.п. Вместо них существуют удобные обертки, которыми необходимо пользоваться!!!
Для твоей задачи, пожалуйста:
_bstr_t, _variant_t, COleSafeArray...