[ Pobierz całość w formacie PDF ]
.pv nie musi wskazywać na początek bloku, może wskazywać* na którykolwiek jego bajt**/void NoteMemoryRef(void *pv)C:\WINDOWS\Pulpit\Szymon\Niezawodność oprogramowania\rdodB.doc 191192 NIEZAWODNOZ OPROGRAMOWANIA{blockinfo *pbi;pbi= pbiGetBlockInfo((byte *)pv);pbi->fReferenced = TRUE;}/* ----------------------------------------------------------* CheckMemoryRefs(void)* Niniejsza funkcja przegląda kronikę w celu znalezienia bloków,* do których nie nastąpiły jeszcze odwołania.W przypadku* znalezienia bloku funkcja sygnalizuje ten fakt za pomocą* stosownej asercji*/void CheckMemoryRefs(void){blockinfo *pbi;for (pbi = pbiHead; pbi != NULL; pbi = pbi->pbiNext){/* prosty test na poprawność wskazywanego bloku */ASSERT(pbi->pb != NULL && pbi->size != 0);/* brak rejestracji odwołania do bloku pbi* oznacza wyciek pamięci*/ASSERT(pbi->fReferenced);}}/* ----------------------------------------------------------* fValidPointer(pv, size)* Niniejsza funkcja dokonuje sprawdzenia, czy wskaznik pv wskazuje* na przydzielony obszar pamięci i czy pomiędzy pv a końcem bloku* znajduje się co najmniej "size" bajtów.Niespełnienie któregoś* z tych warunków powoduje niespełnienie asercji funkcja nigdy nie* zwraca wartości FALSE.** Powodem, dla którego funkcja zawsze zwraca wartość TRUE, jest* możliwość wywoływania jej wewnątrz makra ASSERT.*/flag fValidPointer(void *pv, size_t size){blockinfo *pbi;byte *pb = (byte *)pv;ASSERT(pv != NULL && size != 0)pbi = pbiGetBlockInfo(pb);ASSERT(fPtrLessEq(pb + size, pbi->pb + pbi->size);return (TRUE);}192 C:\WINDOWS\Pulpit\Szymon\Niezawodność oprogramowania\rdodB.docPODPROGRAMY ZARZDZANIA PAMICI 193#endifC:\WINDOWS\Pulpit\Szymon\Niezawodność oprogramowania\rdodB.doc 193194 NIEZAWODNOZ OPROGRAMOWANIA194 C:\WINDOWS\Pulpit\Szymon\Niezawodność oprogramowania\rdodB.doc
[ Pobierz całość w formacie PDF ]