12
votes

Emplacement d'écriture de violation d'accès 0x00000000. lecture int du clavier

J'essaie de lire l'entrée d'un clavier que j'utiliserai pour créer un ensemble de multiplications. Si j'accepte l'entier à utiliser, le programme fonctionne bien, cependant, lorsque je laisse l'utilisateur entrer dans son propre numéro, le programme se bloque et affiche une erreur sur une violation d'accès.

Je suis sûr que c'est quelque chose de simple, mais comme je suis assez Nouveau à C Je ne suis pas totalement sûr de tous les principes à suivre lors de l'utilisation de la langue. xxx

Remarque: je définis la valeur initiale de plusieurs sur 0 sinon je rencontre un Erreur lors de la tentative d'utilisation d'une valeur inintitualisée.

c

1 commentaires

+1 de moi comme c'est une pierre d'achoppement anticipée lors de l'utilisation de Scanf lors de l'apprentissage de C.


5 Réponses :


18
votes
scanf("%d", & multiple);

0 commentaires

6
votes

Changer xxx

à xxx


0 commentaires

6
votes

scanf attend un pointeur sur la variable à définir.

Le formulaire correct est xxx


0 commentaires

16
votes

Juste pour expliquer pourquoi cela s'est passé (comme NEIL a déjà expliqué ce qui l'a causait), Scanf attendait une adresse à écrire. Lorsque vous avez transmis la valeur de "multiple", il a été interprété comme une adresse, spécifiquement adressant 0 comme c'était la valeur à l'époque.

La raison en est que Scanf peut définir la valeur de votre variable à la valeur de l'entrée. Si vous ne passez pas un pointeur, vous passez une copie de la valeur de la variable. Lorsque vous passez un pointeur, vous passez une copie de la valeur du pointeur , afin que Scanf écrit sur cette même adresse de mémoire, il peut modifier la valeur de la variable.


0 commentaires

4
votes

Vous ne passez pas l'adresse de la variable pour plusieurs pour stocker le résultat de scanf d'où l'exigence de scanf ("% d", et plusieurs); .

Ceci indique à l'exécution, de lire un entier et de le placer dans l'adresse de la variable , donc & doit être utilisé. Sans cela, vous avez une erreur d'exécution car vous passez la valeur de la variable mais l'exécution ne sait pas quoi faire avec elle.

dans une coque noix, une variable adresse est indiquée par & .

J'espère que cela aide, Meilleures salutations, Tom.


1 commentaires

Merci pour l'explication détaillée, j'ai voté votre réponse