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 les tableaux de bord, un fournisseur peut sembler irréprochable. Les commandes arrivent à temps,…
Télécharger un Tableau de Bord d'Évaluation Fournisseurs Excel permet de suivre la performance des partenaires…
Dans de nombreuses entreprises, les achats représentent entre 40 % et 80 % des dépenses…
Vieillir est une chance, mais avancer en âge s'accompagne parfois de petits changements que l'on…
La gestion financière d'une Société Civile Immobilière (SCI) repose souvent sur un mécanisme méconnu mais…
Il suffit parfois d'une marche un peu plus longue que d'habitude, d'un escalier à monter…
This website uses cookies.