une erreur de segmentation dans du code C
Dernière réponse : dans Programmation
salut je programmes sous linux avec l'outil cc..
je vous soumet ce bout code, qui me retourne une Erreur de Segmentation, je ne comprends pas du tout le problème qui se pose avec mes declaratio,.
Ce bout de code me sert dans l'ensemble de mon programme et voilà qu'il ne marche pas ..
------A I D E !!----------
-------M E R C I -----------------
je vous soumet ce bout code, qui me retourne une Erreur de Segmentation, je ne comprends pas du tout le problème qui se pose avec mes declaratio,.
Ce bout de code me sert dans l'ensemble de mon programme et voilà qu'il ne marche pas ..
------A I D E !!----------
#include <stdio.h>
/*declaration de le structure de snombre manipulé */
struct nombre{
int typeNombre; /*le type du nombre [entier|reel]*/
double valeur; /*le valeur du nombre */
}nombre;
int main(){
struct nombre *ptrNombre;
ptrNombre->typeNombre=12;
printf("%d\n",ptrNombre->typeNombre);
return 0;
}
-------M E R C I -----------------
Autres pages sur : erreur segmentation code
Lassé par la pub ? Créez un compte
--------- PRIERE D'UTILISER LA BALISE CODE ---------
Pour ce faire, clique sur le bouton
, et ajoute la balise CODE (entre crochets) au début de ton code, et la balise /CODE (entre crochets) à la fin.
Pourquoi ? Parce que :
![]()
--------- RELIS TON MANUEL DE C ---------
(Le chapitre sur les pointeurs)
Un pointeur pointe (si, si) sur une "case" en mémoire.
Soit cette "case" existe déjà, et on fait pointer la variable pointeur dessus.
Soit cette "case" n'existe pas encore, et il faut alors la créer. Si cette "case" n'est pas une variable mais juste un bout de mémoire uniquement référencé par le pointeur, on parle d'allocation.
Je verrais bien un truc comme ça avant la ligne n° 12 ???? (Ben oui gros malin, si tu avais mis ton code entre les balises CODE, on verrait un n° de ligne) :
Pour ce faire, clique sur le bouton
, et ajoute la balise CODE (entre crochets) au début de ton code, et la balise /CODE (entre crochets) à la fin.Pourquoi ? Parce que :

--------- RELIS TON MANUEL DE C ---------
(Le chapitre sur les pointeurs)
Un pointeur pointe (si, si) sur une "case" en mémoire.
Soit cette "case" existe déjà, et on fait pointer la variable pointeur dessus.
Soit cette "case" n'existe pas encore, et il faut alors la créer. Si cette "case" n'est pas une variable mais juste un bout de mémoire uniquement référencé par le pointeur, on parle d'allocation.
Je verrais bien un truc comme ça avant la ligne n° 12 ???? (Ben oui gros malin, si tu avais mis ton code entre les balises CODE, on verrait un n° de ligne) :
ptrNombre = malloc ( sizeof ( struct nombre ) );
....
free ( ptrNombre );
namix97 a dit :
{
struct nombre *ptrNombre;
ptrNombre->typeNombre=12;
}
Le déréférencement d'un pointeur non initialisé invoque un comportement indéfini. Tout peut arriver.
Avant d'utiliser un pointeur, il faut lui donner une valeur valide.
http://mapage.noos.fr/emdel/notes.htm#pointeurs
la trotte a dit :
Déréférencer signifie "Accéder à la valeur pointée". Utiliser l'opérateur * ou ->.C'est dans ton cours de C...
après avoir declarer ma structure
struct nombre {
int typenombre;
double valeur;
}nombre;
Après ma declaration de pointeur sur ma structure :
struct nombre *ptrNombre;
Pour pouvoir faire un initialisation j'aurai du créer une valeur en mémoire?
comme ceci?:
ptrNombre = malloc ( sizeof ( struct nombre ) );
Pour pouvoir enfin faire des initialisations..
Est-ce cela que j'aurai du faire pour éviter des Erreur de segmentation?
Mais ce qui me parait bizzard c'est qu'avec Borland C++, ca marche sans problème ; alors que sous linux (l'outils gcc/cc) cela génère des erreurs..
namix97 a dit :
après avoir declarer ma structureAprès ma declaration de pointeur sur ma structure :
Pour pouvoir faire un initialisation j'aurai du créer une valeur en mémoire?
comme ceci?:
ptrNombre = malloc ( sizeof ( struct nombre ) );
Pour pouvoir enfin faire des initialisations..
Est-ce cela que j'aurai du faire pour éviter des Erreur de segmentation?
C'est ce que tu aurais dû faire pour écrire du code correct, c'est à dire qui n'invoque pas un comportement indéfini.
Mais est-tu sûr d'avoir besoin d'un pointeur ?
struct nombre
{
int typenombre;
double valeur;
};
struct nombre Nombre;
est aussi valable, et si tu dois passer une l'adresse à une fonction, il suffit de faire
f(&Nombre);
Sinon, si on reprend ta définition originale, tu avais combiné définition de la structure et instanciation de celle-ci :
struct nombre
{
int typenombre;
double valeur;
}
nombre;
f(&nombre);
Ou, si tu tenais vraiment au pointeur :
struct nombre
{
int typenombre;
double valeur;
}
nombre;
struct nombre *ptrNombre = &nombre;
f(ptrNombre);
Tout dépend de ce que tu veux faire exactement. Mais une chose est sûre, un pointeur doit être initialisé correctement avant d'être déréférencé.
yannis987 a dit :
bonjour je suis nouveau sur le forum je voullais savoir a koi sérvait un pointeur merci d'avance.STOP !
On ne va pas répondre aux questions basiques qui se trouvent dans n'importe quel tutoriel. Alors tu vas sur le site du zero comme on te l'a déjà conseillé,
http://www.presence-pc.com/forum/ppc/Programmation/erre...
et tu suis le tutoriel C, tu réponds aux QCM, tu fais les exos. Là-bas, tu auras toute l'aide nécessaire. C'est fait pour.
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumErreur de segmentation ns2
- ForumErreur de segmentation dev c
- ForumErreur de segmentation pointeur
- ForumErreur de segmentation gcc
- ForumErreur de segmentation sur string
- ForumErreur de segmentation sous linux
- ForumUne violation d'accã s erreur de segmentation
- ForumErreur de segmentation sur script bash
- ForumErreur code 2
- ForumCode erreur
- Voir plus