Segmentation fault - C - Programmation
Marsh Posté le 09-02-2004 à 17:50:31
Ben tu alloues pas la memoire pour ta structure:
==> struct rdv *rdv1;
Tu declares un pointeur sur une structure (non allouée).
==> readRDV(rdv1,2);
Si c'est la meme chose que: int readDateDebut(struct rdv *unRdv, int numLigne )
==> unRdv->dateDebut.tm_min = minute;
rien que la deja ca peut foirer, puisque unRdv pointe sur une zone non allouée.
A+,
Marsh Posté le 09-02-2004 à 18:02:34
tu peux te calmer s'il te plait ? deux topics avec 2 titres pourris, deux fois que je perds mon temps pour voir que tu n'a pas alloué une pauvre structure
Marsh Posté le 09-02-2004 à 18:14:49
char unChar; |
C'est pas très propre tout ça.
Je pense qu'il y a en fait pas mal de choses à reprendre dans ton code.
Quel est le format d'une ligne de ton fichier ?
Marsh Posté le 09-02-2004 à 19:24:55
taz a écrit : tu peux te calmer s'il te plait ? deux topics avec 2 titres pourris, deux fois que je perds mon temps pour voir que tu n'a pas alloué une pauvre structure |
monseigneur à daigné regarder le topic, monseigneur est trop bon.
Arrêtez de poser des questions vous autres, monseigneur attend de la question de qualité, qui vaille le coup de bouger son lard
Marsh Posté le 09-02-2004 à 19:28:29
darkoli a écrit :
|
ça fait même « boom »
Marsh Posté le 09-02-2004 à 20:23:55
Désolé pour ceux que j'ai ofensé...
Mais le problème est que ca passait tres bien chez moi comme ca.
Et je suis un grand débutant en C.
donc il faut vraiemnt que j'alloue de la mémoire pour chaque pointeur? Comment ca se fait que ca passait chez moi et pas a mon ecole ?
Pour ce qui est de la propreté du code est ce que qqun peut me conseillier qqchose car je vois pas pkoi c pas propre (je débute ..)...
Voici le format d'une ligne de mon fichier :
Code :
|
Marsh Posté le 09-02-2004 à 20:53:37
non
parce que t'avais du bol, tu te balladais dans uns egment de mémoire à tois
Marsh Posté le 09-02-2004 à 21:02:36
Donc si je comprend bien a chaque pointeur il faut un malloc et un free ?...
Mais dans ce cas la comment je fais pour mon pointeur sur FILE (FILE *monFichier) je lui alloue quoi comme et mémoire ? idem pour rdv1 ?
Marsh Posté le 09-02-2004 à 21:13:24
c'est fopen qui alloue en interne un ptr FILE, et fclose qui le libère.
pour rdv1 tu dois bien utiliser malloc et free.
Marsh Posté le 09-02-2004 à 21:15:56
khyna a écrit : Donc si je comprend bien a chaque pointeur il faut un malloc et un free ?... |
non. un pointeur est une chose complètement distincte des allocations dynamiques
Marsh Posté le 09-02-2004 à 21:30:39
khyna a écrit : Donc si je comprend bien a chaque pointeur il faut un malloc et un free ?... |
Tu confonds deux choses:
Le pointeur et ce sur quoi il pointe.
- Tu n'alloues pas de la memoire a un pointeur, c'est fait quand tu le declares (puisque c'est juste un truc de taille fixe contenant une adresse memoire, le compilo sait tres bien allouer ca de maniere automatique).
Mais ton pointeur, il doit pointer sur quelque chose qui a ete alloué en memoire (et ca le compilo ne peut pas savoir a l'avance de quelle taille ca va etre, puisque tu peux tres bien faire pointer ton pointeur sur plusieurs objets successifs du type pointé: int *p, tu peux faire pointer ca sur un entier, ou sur une suite de n entiers; d'autre part, le compilo peut pas savoir a l'avance si tu veux pointer sur un nouvel objet, ou sur un objet existant deja). Donc ce sur quoi ton pointeur va pointer (ie stocker l'adresse memoire)
- Soit c'est deja alloué (par exemple, quand tu vas faire ton FILE *monFichier tu declares juste le pointeur, et quand tu fais monFichier = fopen(argv[1],"r" ); tu fais pointer ton pointeur sur un truc alloué par le systeme et retourné par la fonction fopen. (et dans le cas de trucs alloués par le systeme, il y a soit des fonctions systeme pour desallouer, soit c'est explicitement indiqué dans la documentation de la fonction systeme qui t'a fourni l'objet sur lequel ton pointeur pointe que c'est a toi de le desallouer apres utilisation).
- Soit c'est pas alloué, et c'est a toi de faire l'allocation a coup de malloc puis apres usage, de faire la desallocation a coup de free.
A+,
Marsh Posté le 09-02-2004 à 21:46:43
Merci bcp, je vais avancer grace a ca.
J'ai du boulot devant moi et je dois revoir tout mon programme alors...
Merci encore pour votre aide
Marsh Posté le 09-02-2004 à 17:34:30
Re bonjour,
Je m'y reprend pour vous expliquer mon pb.
J'ai une fonction :
et mon main() :
et j'ai un segmentation fault la ou je l'ai mis en commentaire.
voici la ma struct rdv :
si qqun peut m'éclairer ca serait sympa.
Merci d'avance