heute geht's mir mal um das Thema Über- und Unterläufe. Gegeben sei ein Pointer und ein vorzeichenbehafteter Offset. Wird ein Über- oder Unterlauf entstehen wenn ich den Offset auf den Pointer addiere?
Ich habe mir hierzu eine Template-Methode geschrieben. Hoffentlich ist die auch korrekt, denn obgleich des einfachen Codes fing das Hirn beim Testen an zu käsen.
Code: Alles auswählen
// Liefert "true", wenn pCurrent + offset den gültigen Adressbereich verlässt. Dabei gilt:
//
// - Das Ende des gültigen Adressbereichs ist nicht bei 0xffffffff..., sondern noch davor,
// so das ein Element vom Typ _TType noch platz hat.
// - pCurrent wird als gültig vorausgesetzt
template <class _TType>
bool overflows(const _TType * pCurrent, int offset)
{
static const _TType * pLowerBound = nullptr;
static const _TType * pUpperBound = (_TType *)(-1);
if (offset > 0 && pUpperBound - offset < pCurrent)
{
return true;
}
else if (offset < 0 && pLowerBound - offset > pCurrent)
{
return true;
}
return false;
}