Les tableaux et les pointeurs sont au cœur du langage C. Bien qu’ils offrent une grande flexibilité, ils sont également une source fréquente d’erreurs et de bugs difficiles à identifier. Ce guide explore les différences fondamentales, les pièges courants et des conseils pour déboguer efficacement.
int arr[] = {10, 20, 30}; int *p = arr; // p pointe sur le premier élément de arrprintf("%d\n", arr[1]); // Accès via le tableau printf("%d\n", *(p + 1)); // Accès via le pointeursizeof(arr) retourne la taille totale du tableau (ex. : 3 * sizeof(int)).sizeof(p) retourne la taille d’un pointeur (généralement 4 ou 8 octets).arr = p; // Erreur : Non modifiablemalloc.Accéder à un indice hors des limites d’un tableau entraîne un comportement indéfini :
int arr[3] = {1, 2, 3};
printf("%d\n", arr[5]); // Accès hors des limites
Conséquences :
Solution :
for (int i = 0; i < 3; i++) { printf("%d\n", arr[i]); }Un pointeur est dit dangling lorsqu’il pointe vers une zone mémoire libérée ou invalide.
int *p = (int *)malloc(sizeof(int));
free(p);
printf("%d\n", *p); // Pointeur dangling
Solution :
NULL après libération : free(p); p = NULL;Un pointeur non initialisé pointe vers une adresse aléatoire.
int *p;
printf("%d\n", *p); // Erreur : Pointeur non initialisé
Solution :
int *p = NULL;Ne pas libérer la mémoire allouée dynamiquement peut causer des fuites mémoire :
int *arr = (int *)malloc(5 * sizeof(int));
// Pas de free(arr) ici
Solution :
free(arr);Les pointeurs et les tableaux multidimensionnels peuvent être source de confusion :
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
int *p = arr; // Erreur : Type incompatible
Solution :
int (*p)[3] = arr; // Pointeur vers un tableau de 3 élémentsgdb ./mon_programme
break main : Ajouter un point d’arrêt.run : Exécuter le programme.print *p : Afficher la valeur pointée par p.-fsanitize=address pour détecter les erreurs de mémoire.gcc -fsanitize=address -o mon_programme mon_programme.c
./mon_programme
valgrind ./mon_programme
Problème :
int arr[3] = {1, 2, 3};
for (int i = 0; i <= 3; i++) { // Erreur : Limite incorrecte
printf("%d\n", arr[i]);
}
Solution :
for (int i = 0; i < 3; i++) { // Correction
printf("%d\n", arr[i]);
}
Problème :
int *p = NULL;
printf("%d\n", *p); // Erreur : Déréférencement d’un pointeur NULL
Solution :
if (p != NULL) {
printf("%d\n", *p);
} else {
printf("Pointeur NULL\n");
}
Problème :
int *arr = (int *)malloc(5 * sizeof(int));
// Pas de libération
Solution :
free(arr);
arr = NULL;
NULL ou une adresse valide.free pour chaque malloc.Conclusion : La manipulation des tableaux et des pointeurs en C offre une grande flexibilité, mais nécessite une attention particulière pour éviter les erreurs courantes.
Les pointeurs et tableaux en C, bien qu’essentiels pour de nombreux programmes, peuvent facilement introduire des erreurs complexes et difficiles à déboguer. Voici un guide pratique pour éviter les erreurs courantes et améliorer la fiabilité de vos programmes.
int *p = NULL; // Pointeur initialisé à NULLint arr[5] = {0}; // Initialise tous les éléments à 0for (int i = 0; i < taille_tableau; i++) { printf("%d\n", tableau[i]); }sizeof pour calculer la taille d’un tableau statique. int arr[10]; int taille = sizeof(arr) / sizeof(arr[0]);if (p != NULL) { printf("%d\n", *p); }free. free(p); p = NULL;free pour Éviter les Fuites de Mémoireint *p = (int *)malloc(sizeof(int)); free(p); // Libère la mémoirefor (int i = 0; i < rows; i++) { free(matrix[i]); } free(matrix);\0\0 dans une chaîne peut provoquer des dépassements.\0. char str[6] = "Hello"; // OKstrncpy pour Limiter la Copiestrncpy à la place de strcpy. char dest[10]; strncpy(dest, "Hello", sizeof(dest) - 1); dest[sizeof(dest) - 1] = '\0'; // Terminez manuellementvoid printArray(int arr[], int taille) { for (int i = 0; i < taille; i++) { printf("%d\n", arr[i]); } }gdb ./mon_programmevalgrind ./mon_programme-fsanitize=address pour détecter les erreurs de pointeurs. gcc -fsanitize=address -o programme programme.c ./programme#define CHECK_PTR(p) if ((p) == NULL) { printf("Pointeur NULL\n"); return -1; }Le Marketing Communication Quiz attire de plus en plus d’intérêt, et cela s’explique assez facilement.…
La fiche de traçabilité nettoyage est le doc indispensable dans toute organisation soucieuse d’ordre, d’hygiène…
Face à un sujet de production écrite, beaucoup d’élèves ressentent une hésitation immédiate. Le thème…
Le texte argumentatif impressionne souvent plus qu’il ne le devrait. Beaucoup d’élèves l’abordent avec une…
Dans le parcours du 1er Bac au Maroc, la production écrite occupe une place décisive.…
Observer une entreprise sérieusement demande deux regards distincts. Le premier consiste à identifier sa nature,…
This website uses cookies.