Impossible d’affecter des valeurs à la variable et au pointeur

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));