|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 34 ![]() |
Bonjour,
j'aimerais compiler le programme suivant: Code :
Merci! |
||
|
|
10
|
|
|
#2 | ||
|
Membre émérite
![]() Inscription : février 2009 Messages : 563 ![]() |
Salut,
Quand tu déclares : Le programme réserve 8 octets de mémoire en variable local. Ces 8 octets de mémoires sont destinés à contenir une adresse qui pointera vers quelque part dans la mémoire. Or, en C, si tu n'initialises pas une variable, son contenu est aléatoire (disons que c'est ce qu'il y avait en mémoire avant qui est utilisé). Par conséquent, on en déduit que ce qui avait en mémoire avant ne correspond pas à une adresse valide dans ton programme. Tu feras donc : Code :
Je te conseille vivement de lire un livre sur le C. |
||
|
|
00
|
|
|
#3 | ||
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 435 ![]() |
Pour stocker la donnée (34), il te faut définir un objet : char data;.
Tu veux accéder à cet objet explicitement par son adresse et tu crées un objet pour stocker cette adresse (pointeur) et tu mets l'adresse dedans : char * pc = &data;. Le programme devient Code :
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
||
|
|
10
|
|
|
#4 | ||
|
Invité régulier
![]() Pierre-Antoine Étudiant Inscription : décembre 2012 Messages : 2 ![]() |
Salut,
Dans le C tu as aussi besoin d'allocation mémoire, Ici tu veux stocker 34 dans pc, qui correspond à un caractère dans la table ASCII, sans y avoir alloué de la mémoire. Essaye donc plutôt : Code :
Bonne journée |
||
|
|
10
|
|
|
#5 |
|
Membre expérimenté
![]() ![]() Titouan Créac'hEpitech Inscription : mai 2009 Messages : 250 ![]() |
attention, dans cette affichage, tu n'as pas besoins du '&' étant donné que "pc" est déjà un pointeur sur char.
Code :
printf ("Adresse de la variable en hexa est: %p\n",pc); |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Pierre-Antoine Étudiant Inscription : décembre 2012 Messages : 2 ![]() |
En effet,
Je lui expliquais juste pourquoi son programme SEGFAULT |
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 34 ![]() |
ok j'ai compris!
Une dernière question: char *pc = &data est bien équivalent à : char *pc; pc = &data; Merci. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 220 ![]() |
quasiment.
La subtilité (qui te sera surtout utile si tu fais du C++) est que dans la première forme, la variable pc est construite avec la valeur de &data, tandis que dans la seconde, sans optimisation, pc est construite par défaut, puis reçoit une valeur.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 34 ![]() |
ok
et aurait-on pu initialiser le pointeur comme suit: char *pc = NULL ? |
|
|
00
|
|
|
#10 |
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
Oh que oui ! C'est généralement sous cette forme qu'on initialise un pointeur pour bien montrer/mémoriser qu'aucune allocation mémoire correspondante n'a été faite (NULL, soit 0, n'est jamais une adresse valide)
|
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 34 ![]() |
ok!
Merci pour tout! |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com