утечка памяти при исп. IHTMLDOMNode::get_nodeName
От: bezrodnii  
Дата: 22.03.04 09:07
Оценка:
Добрый день.
при использовании следующего куска кода:

................
hr_inet = pHTMLElemBody_i -> QueryInterface(IID_IHTMLDOMNode, (void**)&pRootNode_i);

int rr=0;
BSTR tagName = SysAllocString(L"XXXXX");
while( rr <= 100000)
{
pRootNode_i->get_nodeName(&tagName);
rr++;
}
::SysFreeString(tagName);

происходит утечка памяти порядка 5-6 МегаБайт,
я искал утечку памяти, в код проги воткнул цикл while( rr <= 100000), и вот плачевный результат Task Manager — показал эту утечку.

очень расчитываю на Вашу помощь.
Re: утечка памяти при исп. IHTMLDOMNode::get_nodeName
От: Ivan Россия www.rsdn.ru
Дата: 22.03.04 09:13
Оценка: 8 (1)
Здравствуйте, bezrodnii, Вы писали:

B>int rr=0;

B>BSTR tagName = SysAllocString(L"XXXXX");
B>while( rr <= 100000)
B>{
B> pRootNode_i->get_nodeName(&tagName);
B> rr++;
B>}
B>::SysFreeString(tagName);

B>происходит утечка памяти порядка 5-6 МегаБайт,


Память для [out]-параметров должен осваобождать клиент. Поэтому код нужно исправиьт так:
BSTR tagName = 0;
while( rr <= 100000)
{

     pRootNode_i->get_nodeName(&tagName);
     rr++;
     SysFreeString(tagName); 
}

А лучше всего использовать wrapper'ы:
while( rr <= 100000)
{
     CComBSTR tagName;
     pRootNode_i->get_nodeName(&tagName);
     rr++;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.