Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

SysAllocString, SysFreeString

15K
25 апреля 2006 года
avgousto
7 / / 11.04.2006
Такая проблема. Заметил что при выполнении одной опрерации в программе активно поедается и не освобождается память. Все проверил- утечек быть не должно. Грешу на операцию SysAllocString, это функция вызывается тут многократно. Дак вот вопросы: если я при этом не вызываю SysFreeString что произойдет? Обязательно ли это нужно делать чтоб освобождать память? И что делать если эти строки я передаю в качестве возвращаемых значений - нужно их очищать там куда они передаются?
.....Заранее благодарен
395
25 апреля 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by avgousto
Такая проблема. Заметил что при выполнении одной опрерации в программе активно поедается и не освобождается память. Все проверил- утечек быть не должно. Грешу на операцию SysAllocString, это функция вызывается тут многократно. Дак вот вопросы: если я при этом не вызываю SysFreeString что произойдет? Обязательно ли это нужно делать чтоб освобождать память? И что делать если эти строки я передаю в качестве возвращаемых значений - нужно их очищать там куда они передаются?
.....Заранее благодарен


Конечно нужно вызывать SysFreeString... Но зачем так мучаться, если у нас есть bstr_t?

15K
25 апреля 2006 года
avgousto
7 / / 11.04.2006
Цитата:
Originally posted by RelB
Конечно нужно вызывать 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? - если элементы массива строки, очистит ли он их сам, либо нужно каждый элемент перебирать и очищать его руками?

395
25 апреля 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by avgousto
Посмотрел в 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...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог