IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Programme qui quitte subitement


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Par défaut Programme qui quitte subitement
    Bonjour, désolé pour le titre pas très explicite mais il est assez difficile de donner un nom à ce problème.

    Depuis quelques jours, j'ai un bug dans mon programme qui vient apparemment de malloc. J'ai donc essayé de réduire le code jusqu'à arriver à la ligne qui pose problème. Je ne sais pas si j'y suis arrivé mais en tout cas, j'en suis arrivé à un point où j'ai isolé, semble-t-il, un problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdlib.h>
    #include <stdio.h>
     
    typedef struct {
        int bla;
    } tableau, *ptableau;
     
    typedef struct{
        int bla;
    } bille, *pbille;
     
    typedef struct recordxxx{
        unsigned int val;
        struct recordxxx* suiv;
    } record, *precord;
     
    typedef struct {
        unsigned short longueur;
        unsigned short largeur;
        double angle;
        pbille bille_prete;
        pbille bille_suivante;
    } canon, *pcanon;
     
    int main() {
        pcanon canon = NULL;
        ptableau jeu = NULL;
        precord records = NULL;
     
        jeu = (ptableau) malloc(sizeof(tableau));
        records = (precord) malloc(sizeof(record));
        canon = (pcanon) malloc(sizeof(canon));
     
        // repere 1
     
        canon->largeur = 10;
        canon->longueur = 100;
        system("pause"); // repere 2
        canon->angle = 4;
     
        canon->bille_prete = (pbille) malloc(sizeof(bille));
        canon->bille_suivante = (pbille) malloc(sizeof(bille));
     
        printf("4\n");
        system("pause");
     
       return (EXIT_SUCCESS);
    }
    Ce code fonctionne bien.

    Cependant, si vous supprimez le premier system("pause") (repere 2), ça ne marche plus : le programme freeze ou quitte brutalement. Si vous passez les 2 derniers malloc au niveau du repere 1, ça marche même si on enlève la pause.

    Si vous avez des idées, je suis très preneur, merci.

  2. #2
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Par défaut
    Salut,

    Chez moi sa compile et fonctionne sans soucis (sous linux/gcc et en enlevant le system("pause");

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    il y a un problème avec canon : c'est à la fois un type et une variable...
    La taille de quel canon faut il prender ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canon = (pcanon) malloc(sizeof(canon));

    Au passage, il n'est pas utile de caster le retour de malloc, on peut donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pcanon can = NULL;
    can =  malloc(sizeof(canon));
    ou plus facile à maintenir si can change de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pcanon can = NULL;
    can =  malloc(sizeof * can);

  4. #4
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Par défaut
    Merci mabu, il semble que c'était lié au fait que des variables pouvait avoir le même nom qu'une structure.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LG]programme qui renomme des fichiers
    Par Ne0taku dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2005, 21h18
  2. programme qui consomme beaucoup de memoire
    Par gaut dans le forum Windows
    Réponses: 10
    Dernier message: 01/02/2005, 20h33
  3. Programme qui analyse un fichier log
    Par abdou.sahraoui dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 20/08/2004, 14h27
  4. [LG]Programme qui n'affiche rien
    Par ousunas dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2004, 19h38
  5. Recherche programme qui convertit les chiffres arabes en nb
    Par oli57 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 15/06/2002, 03h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo