Pazīmes
Apsveriet šādu situāciju:
-
Izveidojat tīmekļa pārlūkprogrammas vadīklu resursdatora lietojumprogrammā vai ActiveX vadīklu.
-
Lietojumprogramma vai ActiveX vadīklu no kolekcijas interfeisa HTML lapas norāda skaitītājs objektu. Lai izveidotu šo funkcionalitāti, skatiet šos norādījumus:
-
C++, skaitītājs iegūst, izsaucot funkciju get__newEnum vākšanas interfeiss. Kolekcijas interfeisa piemērs ir IHTMLElementCollection, un parasti tas tiek iegūta, zvanot pa tālruni IHTMLDocument2::get_all.
-
Visual Basic, šī darbība tiek veikta aiz ainas foreach konstrukcija kolekcijai (piemēram, document.all kolekcija).
-
-
Palaižot programmu datorā, kurā ir instalēta pārlūkprogramma Internet Explorer 10.
Šajā situācijā rodas atmiņas noplūde.
Piezīme. ActiveX vadīklas patērēt vairāk atmiņas nekā vietējais HTML elementu, jo atmiņas noplūde ir skaidrs, ja vienu no elementiem kolekcijā ir ActiveX vadīkla.
Piemēram, rodas atmiņas noplūde, lietojot web pārlūkprogrammas vadīklu resursdatora lietojumprogrammā funkcija C++ kodu. Šajā gadījumā liels atmiņas apjoms ir "nopludināta", ja vienu no elementiem lapā ir ActiveX vadīkla.
void CEnumLeakDlg::OnBnClicked(){
IDispatch* pDocDisp = m_web.get_Document();
IHTMLDocument2* pDoc = NULL;
HRESULT hr = pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc);
IHTMLElementCollection* pElColl = NULL;
hr = pDoc->get_all(&pElColl);
IUnknown* pEnum = NULL;
hr = pElColl->get__newEnum(&pEnum);
pEnum->Release();
pElColl->Release();
pDoc->Release();
pDocDisp->Release();
}
Risinājums
Lai novērstu šo problēmu, instalējiet šo atjauninājumu:
2862772 MS13-059: kumulatīvais drošības atjauninājums pārlūkprogrammai Internet Explorer: 2013. gada 13. augusts
Papildinformācija
Lai iegūtu papildinformāciju par programmatūras atjauninājumu terminoloģiju, noklikšķiniet uz šī raksta numura un lasiet Microsoft zināšanu bāzes rakstu:
824684 tiek izmantota Microsoft programmatūras atjauninājumu standarta terminoloģijas apraksts