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; }Un entretien d’embauche ressemble rarement à une conversation ordinaire. Derrière des questions en apparence simples…
Préparez efficacement votre entretien commercial avec 140 questions clés et 12 mises en situation concrètes…
Un entretien d’embauche crée souvent une impression particulière. Quelques minutes avant d’entrer dans la salle…
Dans le bâtiment, un devis représente souvent le premier véritable contact entre une entreprise et…
Dans un EHPAD, chaque candidature révèle une manière d’être autant qu’un savoir-faire. Derrière la lettre…
Télécharger des modèles et exemples Word de lettres de motivation pour mutation interne ⬇️ Au…
This website uses cookies.