Exemples de pointeur arithmétique et de ses pièges en C et C++

L'arithmétique pointeur est une caractéristique courante en C et C++, permettant la manipulation directe des adresses de mémoire. Bien que l'utilisation puissante et inappropriée peut conduire à des bogues, des vulnérabilités de sécurité et un comportement non défini.

Exemple 1: Arrayages de traversée

L'arithmétique pointeur est souvent utilisé pour itérer efficacement les tableaux. Par exemple, pour résumer les éléments d'un tableau entier:

Utilisation correcte:

la somme int = 0;

int *ptr = tableau;

pour (int i = 0; i < taille; i++) {

somme += *(ptr + i);

}

Cette méthode accède correctement aux éléments de tableau en utilisant l'arithmétique pointeur.

Piège 1: Pointeur Arithmétique au-delà des bornes de la baie d'Array

Déplacer des pointeurs au-delà de la mémoire allouée peut causer un comportement non défini. Par exemple:

int *ptr = tableau;

pour (int i = 0; i <= taille; i++) {

printf("%dn", *(ptr + i));

}

L'accès à *(ptr + taille) dépasse les limites du tableau, ce qui conduit à des résultats imprévisibles.

Exemple 2: Manipulation de chaînes

L'arithmétique pointeur est fréquemment utilisé dans le traitement des chaînes. Par exemple, copier une chaîne :

Approche correcte:

char *src = "Bonjour";

de la part de l'autorité compétente,

char *p = src;

*q = dest;

pendant que (*p) {

*q++ = *p++;

}

*q = '';

Piège 2 : Erreurs hors-par-un dans la copie de chaînes

Ne pas attribuer de place au terminateur nul ou copier au-delà du tampon provoque des débordements de tampon. Par exemple :

les mesures de protection contre les accidents;

char *p = "monde";

pour (int i = 0; i <= 5; i++) {

det[i] = p[i];

}

Ceci copie six caractères dans un tampon à cinq caractères, causant un débordement.

Conclusion

L'arithmétique pointeur offre une flexibilité en C et C++, mais il faut une manipulation soigneuse pour éviter les erreurs.