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 :

Soucis de compilation sous Linux


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut Soucis de compilation sous Linux
    bonjour , voilà j'ai un gros problème :sous linux j'ai de gros bug pour compiler ce code tandis que sous windows aucune erreure à la compilation, pouvez vous me dire si vous aussi vous avez des erreures quand vous compiler sous linux ???

    Main.c :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <string.h>
     
            //liste chainée qui rassemble les villes connexes d'une ville
    typedef struct ville
    {
        int    city;            //numéro de la ville
        float  dist;            //distance entre cette ville et la précédente
        struct ville *suiv;     //maillon suivant
    }S_Ville;
     
    S_Ville ** Charge_Graph(S_Ville ** Graph, char*** Nom_ville, int *Nb_ville_graph)
    {
    //déclaration des variables
        int       Nb_suc = 0;      
        FILE*     Fichier;         
        S_Ville * tmp = NULL;      
        int       i, j;            
     
            //ouvre le fichier
        Fichier = fopen("./graphe.txt", "r");
        assert(Fichier && "Fichier introuvable");
     
            //récupère le nombre de villes du graphe
        fscanf(Fichier, "%d", Nb_ville_graph);
    printf("il y a %d villes.\n",(*Nb_ville_graph));
     
     
            //alloue la mémoire
        Graph        = (S_Ville**)malloc(sizeof(S_Ville*));
        (*Nom_ville) = (char**)malloc(sizeof(char*));
    	//parcoure chaque ville du graphe
    	for(i=0; i<(*Nb_ville_graph); i++)
        	{
    	//alloue et initialise la liste de successeurs
            Graph[i] = (S_Ville*)malloc(sizeof(S_Ville));
    	Graph[i] = NULL;
    	}
     
     
    fclose(Fichier);
    return Graph;
    }
     
    //============================================================================//
    //  Fonction principale du programme                                          //
    //============================================================================//
    int main(void)
    {
            //déclaration des variables
        FILE*     Fichier = NULL;      //Fichier
        S_Ville** Graph;               //graphe
        int       Nb_ville_graph = 0;  //nombre de villes du graphe
        int       i = 0;               //boucle
        char**   Nom_ville;
     
    Charge_Graph(Graph, &Nom_ville, &Nb_ville_graph);
     
     
        return 0;
    }
    graphe.txt :
    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
     
    14
    1 5 1 3 10 2 8 5 7 4 2 7
    b 4 4 5 2 5 0 3 12 4
    c 4 3 1 1 5 0 7 7 8
    d 3 6 4 4 5 2 1
    e 3 3 5 5 6 1 5
    f 1 4 6
    g 1 3 4
    h 3 2 8 8 7 0 4
    i 3 7 8 10 6 0 5
    j 1 10 3
    k 5 0 2 8 6 9 3 11 6 12 5
    l 2 12 6 10 6
    m 3 1 4 10 5 11 6
    n 3 1 4 10 5 11 6
    pleaze , Merci

    ps : je sais que dans le code , il manque des choses au niveau des libérations de mémoire ...

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    j'avais eu ce problème mais ds l'autre sens,

    OK sous linux, et impossible a faire marché sous windows.

    Ce que j'avais fait :

    enregistrer le fichier C de linux,
    l'ouvrir sous DEV C++ (windows), faire enregistrer sous ( emplacement que tu veux sous win. )
    tu referme et rouvre et sa marchait....

    maintenant tu a peut être un autre problème

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    il me met une erreure de segmentation :
    pour ces codes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Graph[i] = (S_Ville*)malloc(sizeof(S_Ville));
    Graph[i] = NULL;
    je ne comprends pas

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Quelques problèmes dans ton code:

    * Tu alloue un seul élément mais ensuite tu accèdes a des éléments d'indice > 0 (c'est la cause de ton plantage).
    * Tu effectue une allocation pour ensuite écraser l'adresse obtenue avec NULL ==> fuite mémoire.
    * Tu ne testes pas si les allocations mémoire et l'ouverture de fichier se sont bien passe.
    * La mémoire allouée n'est jamais libérée.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    je sais pour la libération de la mémoire ainsi que pour l'ouverture du fichier ,
    mais comment faire pour corriger ces problèmes sachant que sous windows ça marche impecc

    l'allocation marche j'ai vérifié mais sous linux "erreure de segmentation"

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Klaine Voir le message
    mais comment faire pour corriger ces problèmes sachant que sous windows ça marche impecc
    Non, ca ne fonctionne pas impecc, ça semble fonctionner seulement.

    Citation Envoyé par Klaine Voir le message
    l'allocation marche j'ai vérifié mais sous linux "erreure de segmentation"
    Le seg fault vient du premier problème que j'ai signaler, tu alloues un élément mais tu accède a Nb_ville_graph éléments ==> accès à une adresse invalide.
    Il faut allouer le bon nombre d'éléments.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    donc il suffit que je récupère la valeur pointée par Nb_ville_graph ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    enfin j'ai réussi enfin j'espère mais ça a l'air de marcher
    ça me met la même chose que sous windows

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

Discussions similaires

  1. erreur a la compilation sous linux
    Par superC dans le forum wxWidgets
    Réponses: 40
    Dernier message: 10/03/2007, 12h54
  2. Compiler sous linux
    Par d.w.d dans le forum Linux
    Réponses: 2
    Dernier message: 05/01/2007, 23h31
  3. [mono] Compilation sous linux, erreur dans windows
    Par AlexandreP dans le forum Mono
    Réponses: 6
    Dernier message: 18/08/2006, 19h56
  4. erreur de compilation sous linux
    Par petdelascar dans le forum C
    Réponses: 11
    Dernier message: 21/12/2005, 20h10
  5. pb de compilation sous linux
    Par prsieux dans le forum Linux
    Réponses: 10
    Dernier message: 20/12/2005, 17h49

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