Table of Contents
Peker aritmetisk er en vanlig funksjon i C og C++, som tillater direkte manipulering av minneadresser. Mens kraftig, feil bruk kan føre til feil, sikkerhets sårbarheter og udefinert oppførsel. Denne artikkelen presenterer virkelige eksempler som illustrerer både programmer og fallgruber av peker aritmetikk.
Eksempel 1: Traversing Arrays
Pekeraritikk brukes ofte til å iterere gjennom tabeller effektivt. For eksempel, til sum elementer i et heltallsarray:
Korrekt bruk:
int sum = 0;
*ptr = array;
for (int i = 0; i < størrelse; i++) {
sum += *(ptr + i);
}
Denne metoden tillater riktig tilgang til tabellelementer ved hjelp av pekeraritikk.
Pitfall 1: Peker Aritmetic Utenfor Array grenser
Flytte markører utover det tildelte minnet kan forårsake udefinert oppførsel. For eksempel:
*ptr = array;
for (int i = 0; i <= størrelse; i++) {
printf( ⁇ %dn ⁇ *(ptr + i));
}
Å få tilgang *(ptr + størrelse) overstiger rekkeviddegrenser, noe som fører til uforutsigbare resultater.
Eksempel 2: Strengmanipulering
Pekeraritikk brukes ofte i strengbehandling. For eksempel kopierer du en streng:
Korrekt tilnærming:
tegn * src = ⁇ Hello ⁇ ;
tegn dest[6];
tegn * p = src;
tegn * q = dest;
mens (* p) {
*q++ = *p++;
}
*q = '';
Pitfall 2: Av-for-Et feil i streng kopiering
Hvis du ikke tildeler plass til nullterminatoren eller kopierer utover bufferen, forårsaker bufferoverfloder.
tegn dest[5];
tegn * p = ⁇ verden ⁇ ;
for (int i = 0; i <= 5; i++) {
dest[i] = p[i];
}
Dette kopierer seks tegn til en fem-tegns buffer, noe som forårsaker overflod.
Konklusjon
Peker aritmetikk gir fleksibilitet i C og C++, men det krever nøye håndtering for å unngå feil. Forstå felles fallgruber bidrar til å hindre feil og sikkerhetsproblemer i programvareutvikling.