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 :

Passage de CodeBlocks à Gedit


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Par défaut Passage de CodeBlocks à Gedit
    Bonjour,

    Tout comme annoncé dans mon titre, mon problème apparait lorsque je suis passé à Gedit,je ne sais pas si vous voulez que je mette le programme il fait beaucoup de lignes.

    En gros ce que j'ai, c'est un SegFault qui apparait uniquement avec Gedit, après utilisation de GDB ils m'a indiqué trois fautes du même type :

    isoc99_fscanf.c

    Mais je ne vois pas très bien ce que cela veut dire.

    je vous remercie pour votre aide !

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Le problème ne viens sûrement pas de Gedit, ce n'est qu'un éditeur de texte comme Notepad++. En passant à Gedit tu es, je pense, passé en compilation avec les Makefile. Utilises-tu les bons flags genre -std=c99 ou d'autres avoir un maximum de warning ?

    Sinon essaie de cibler de dégager la partie du code qui pose problème et montre nous le.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Par défaut
    0x0000000000402ff7 in getKernel (kernel=0x7fffffffe180 "\356\341\377\377\377\177") at main.c:866

    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
     
    int** getKernel(char* kernel)
    {
        int i = 0;
        int j = 0;
        int **p = (int**) malloc(sizeof (int*) * 3);
        FILE *file = NULL;
        file =fopen("kernel.txt","r");
        for ( i = 0; i < 3; i++)
        {
            p[i] = (int*) malloc( sizeof (int) * 3);
            for ( j = 0; j < 3; j++)
            {
                fscanf(file, "%d", &p[i][j]);
            }
        }
        fclose(file);
        return p;
    }
    #2 0x000000000040482f in convolutionP3 (width=512, height=512, nameOfFile=0x7fffffffe1a0 "baboon.ppm", kernel=0x7fffffffe180 "\356\341\377\377\377\177", sat=255, max=7)
    at main.c:1008
    Je peux donner plus de code mais ça risque d'être un peu long y'a 100 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        p = getKernel(kernel);
    Et la dernière erreure me dit qu'il y'a un problème dans ma fonction(celle qui posséde les fonctions cités ci-dessus

    Et y'a une erreur bonus:
    #0 __isoc99_fscanf (stream=0x0, format=0x409bda "%d") at isoc99_fscanf.c:30
    Ligne 30 qui n'a pas vraiemnt de sens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int minint(int first, int second)
    {
        int min = 0;
        if (first <= second)
        {
            return first;
        }
        else
        return second;
    }
    Ah oui et je n'ai pas encore makefile en place je le ferai dés que ce programme fonctionne sous avec le terminal

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Le premier conseil que l'on peut te donner, c'est de vérifier systématiquement tout les retours de fonctions qui renvoient des pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int **p = (int**) malloc(sizeof (int*) * 3);
    ne devrait pas échouer, mais on ne sait jamais...

    Si malloc échoue, p vaudra NULL. Il faut donc vérifier si tu obtiens quelque chose de différent de NULL avant d'aller plus loin.

    Il en va de même pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p[i] = (int*) malloc( sizeof (int) * 3);
    Les deux lignes que je viens de montrer risquent vraiment très peu d'échouer, car l'espace nécessaire à la représentation de trois pointeurs ou de trois entiers n'est pas particulièrement immense, mais on ne sait jamais.

    Par contre, il reste une dernière ligne qui risque de renvoyer un pointeur NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file =fopen("kernel.txt","r");
    Et pour cette ligne, le risque est beaucoup plus grand, car l'ouverture du fichier peut échouer pour de nombreuses raisons:
    • Il faut que le fichier existe dans le dossier dans lequel il sera recherché
    • Il faut que le fichier ne soit pas -- pour une raison ou une autre -- verrouillé (par une autre application ) afin d'éviter qu'on y accède
    • Il faut que l'on dispose des droits suffisant pour accéder au fichier (surtout sous linux )
    • J'en passe, et sans doute de meilleures
    A ce sujet, on peut décemment se poser la question de savoir pourquoi tu transmet un char* nommé kernel si c'est pour, quand même, utiliser le nom du fichier "kernel.txt" codé en dur

    Mais, selon moi, il y a simplement de très grandes chances pour que le fichier kernel.txt ne se trouve simplement pas à la bonne place.

    Du coup, il ne pourra pas être ouvert, ce qui fait que file vaudra NULL .

    Et toute tentative d'utilisation de file t'enverra systématiquement sur les roses avec une erreur de segmentation, car NULL représente une adresse invalide (et donc, inutilisable en tant que telle )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. passage de Gedit(unix) au bloc note de Windows
    Par lilly74 dans le forum Windows
    Réponses: 3
    Dernier message: 17/10/2009, 16h10
  3. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39
  4. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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