Dupliquer possible:
Erreur de segmentation lors de la tentative d’impression d’une valeur en C
Je suis très nouveau en C, mais je ne sais pas pourquoi ce programme est interrompu. Le programme est compilé et exécuté si je supprime les lignes relatives à i
, mais si j’assigne i
, je ne peux plus rien assigner à *ptr
sans interrompre le programme.
int main(void) { int i; int *ptr; i = 2; *ptr = 5; printf("%d",*ptr); }
Vous quittez le pointeur avec une valeur non initialisée. Ainsi, lorsque vous le déréférence ( *ptr
), vous accédez à un emplacement arbitraire en mémoire, ce qui entraîne une erreur de segmentation.
Pointez ptr
sur quelque chose en atsortingbuant à ptr
lui-même (pas *ptr
) l’adresse d’une variable (comme &i
) ou d’une mémoire fraîchement allouée (comme malloc(sizeof(int))
).
Voici la réponse pour C:
int main(void) { int i; int * ptr = (int *)malloc(sizeof(int)); i = 2; *ptr = 5; printfn("%d",*ptr); free(ptr); }
Vous pouvez également utiliser les lignes d’assignation i et * ptr suivantes:
int main(void) { int i; int * ptr; i = 2; ptr = &i; printfn("%d",*ptr); // should print 2 }
Remarquez aussi que la gratuité est sortie !!!
Vous avez déclaré ptr mais ne l’avez pas signalé. Ensuite, vous avez essayé d’écrire à quoi il pointe. Ce n’est jamais une bonne idée. Essayez de faire le point ptr à i en ajoutant la ligne
ptr = &i;
avant d’essayer d’écrire à * ptr
Avant d’utiliser un pointeur en C, vous devez soit définir le pointeur sur un bloc de mémoire existant, vous devez lui allouer de la mémoire, comme ceci.
int *ptr = (int *)malloc(sizeof(int));