Édition pédagogique en français
Erreur de segmentation en C
Repérez les accès mémoire invalides et corrigez la durée de vie des objets.

Un pointeur non initialisé, un indice hors limites ou un objet déjà libéré peuvent provoquer un accès invalide. Le comportement est indéfini : une erreur de segmentation visible n’est pas garantie à chaque exécution.
Réduisez le programme au plus petit cas qui reproduit le problème. Vérifiez les limites, le résultat de malloc et la durée de vie de chaque objet. Ne renvoyez pas l’adresse d’une variable locale automatique après le retour de sa fonction.
Un débogueur ou AddressSanitizer peut localiser l’accès fautif lorsque votre environnement le permet. Corrigez la cause de l’accès, puis testez aussi les tableaux vides et les tailles limites.
Code source
#include <stdio.h>
int main(void)
{
int values[] = {10, 20, 30};
size_t count = sizeof values / sizeof values[0];
for (size_t i = 0; i < count; ++i) {
printf("values[%zu] = %d\n", i, values[i]);
}
return 0;
}Ouvrir dans le compilateurQuestions fréquentes
Pourquoi le code et certains résultats restent-ils en anglais ?
Les mots-clés C, les identifiants, les commentaires du programme et les sorties attendues restent ceux de la version originale pour conserver un code exécutable et des tests cohérents. Les explications et les consignes sont traduites.