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; }Dans toute organisation moderne — entreprise, association, service administratif ou bureau de projet — la…
Dans la pratique comptable, le bilan constitue l’un des documents les plus fondamentaux pour comprendre…
L’analyse linéaire impressionne souvent plus qu’elle ne le devrait. Au moment d’aborder l’oral du bac…
L’analyse linéaire occupe une place centrale à l’oral du bac français. C’est l’exercice qui permet…
Créer une fiche de suivi claire et adaptée à son activité prend souvent plus de…
Comment améliorer sa condition physique tout en travaillant la technique Quand on parle de préparation…
This website uses cookies.