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

  1. #21
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Hihi, je passe en vitesse !

    Je cherchais un truc sur la section z/OS, et j'ai vu un MP de nysay27 datant de début juillet sur de l'ordonnancement d'applications (et je crois qu'il essaye d'écrire un parser en C d'après tous les topics qu'il a posté).
    Alors du coup... bah j'essaye de l'aider !
    J'ai un poil oublié les trucs mainframes depuis 1 an (le C c'est pas mieux, j'en ai tapé un peu il y a 4 mois pour une ludum dare avec un ami ! xD).

    Mais comme il me reste quelques jours de vacances.... (bon en fait il me reste 1 semaine exactement pour boucler un mémoire de recherche, mais je sature hahahahaha ! Et ça ne parle pas du tout de programmation, alors je me change l'esprit ici ! )


    Bref pour en revenir au sujet :
    Sans le code je sais pas trop ce qu'il essaye de faire....
    C'est un malloc de 0 ?!
    (mais c'est bizarre tout de même qu'il n'y ai pas de mise en forme toute jolie dans son drmemory )
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  2. #22
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    0 byte beyond last valid byte = un octet trop loin après la fin d'un bloc alloué. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *truc=malloc(25);
    truc[25]=0;

  3. #23
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Rebonjour, tout le monde.Je réattaque

    Donc si je comprend bien, il y a dans un premier temps un problème dans un malloc avec sizeof (*char) qui est trop petit et probablement le déroulement d'un tableau qui va un indice trop loin.

    Bien joué Metalman, en effet je parse un batchloader en C et je suis tellement prèssss...

  4. #24
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Oulalala : on a la raison du problème !

    sizeof (char*) dans un malloc ça ne fonctionne pas !
    "sizeof" est une instruction du préprocesseur => c'est à la compilation qu'il est remplacé, et pas à l'exécution....
    Donc/Ensuite : "char*" ne peut pas être connu à la compilation ! Enfin si : qu'il fait 32/64bits, mais sûrement pas la longueur d'une chaîne (car c'est un pointeur !)

    Tu dois donc utiliser "strlen" (man 3), et ne pas oublier "+ 1" pour y ajouter le '\0' final !

    strlen sera exécuté pendant que le programme tourne, et il comptera la taille d'une chaîne.


    Haha, je suis très curieux de voir le résultat de ton batchloader !
    Car si c'est bien pour générer un graphe....
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  5. #25
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Mon tableau est un char **. Il faut bien que je définisse ce qu'il y a dedans et sa taille.

    J'ai déclaré comme ceci :

    tab_id = malloc((blocks) * sizeof(char *));
    tab_id[nbApp] = malloc(strlen(trim(ligne_lue))) ;

    J'ai pas compris tes deux petites lignes
    Citation Envoyé par Metalman
    Haha, je suis très curieux de voir le résultat de ton batchloader !
    Car si c'est bien pour générer un graphe....

  6. #26
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab_id[nbApp] = malloc(strlen(trim(ligne_lue))) ;
    Il manque sans doute un "+1" (erreur que je raconte dans mon lien).

  7. #27
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ici on a tout le superflu. On a les logs du débugging, les infos du PO, les conseils généraux des pros (ce qui n'empêche pas toutefois quelques petites erreurs par exemple quand Metalman dit qu'on ne peut pas mettre de "sizeof(char*)" dans un malloc) mais on n'a pas le principal c'est à dire le code source !!!

    Citation Envoyé par Bktero Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab_id[nbApp] = malloc(strlen(trim(ligne_lue))) ;
    Il manque sans doute un "+1" (erreur que je raconte dans mon lien).
    Surtout si trim(ligne_lue) renvoie une chaine vide !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #28
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Bonjour Svear,

    Je ne comprends pas la remarque si strlen renvoie une chaîne vide puisqu'en effet j'ai spécifier que le code marche en debuger... pourquoi la log que j'ai créée en debugger serait rempli si le problème était un retour de ligne vide

  9. #29
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    (Hmmm... j'ai confondu avec le problème des malloc(sizeof(variable_pointeur_sur_char)) haha... c'est le manque d'exercice ça.)

    Il y a trop de choses possibles en effet...
    Les reads/mallocs sont pas bons, et c'est probablement la racine de tous tes problèmes.

    Nysay : poste ton code !

    (quand tu auras terminé, ça m'intéresserait de voir le programme + le JCL ! :o c'est ce que je voulais dire)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  10. #30
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Bon vous l'aurez voulu.Je lâche la bombe

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <math.h>
     
    char *ltrim(char *s) ;
    char *rtrim(char *s) ;
    char *trim(char *s) ;
    int tabledehash(char * tab, FILE* fl) ;
    int cpteblocks(void) ;
     
        /***************************Structure applications*****************************************/
    typedef struct
    {
        char id     [80];
        char descr  [80];
        char owner  [80];
        char preid  [80];
    } applications ;
     
        int ID = 0;
        FILE * fileLog = NULL ;
     
        /***************************Structure table de hachage************************************/
    /*struct HashTable
    {
    int key;
    Liste *PREAID; // Pointeur sur la table allouée
    };*/
        /***************************Fonction Hachage => codage des ID en clé**********************/
     
    char *ltrim(char *s)
    {
        while(isspace(*s)) s++;
        return s;
    }
     
    char *rtrim(char *s)
    {
        char* back = s + strlen(s);
        while(isspace(*--back));
        *(back+1) = '\0';
        return s;
    }
     
    char *trim(char *s)
    {
        return rtrim(ltrim(s));
    }
     
    /*int tabledehash(char * tab, FILE* fl)
    {
     
        int i = 0;
        int nombrehache = 0;
        fprintf(fl, "### Compute HashKey with %d for %d ###", ID, strlen(tab));
        for (i = 0 ; i<strlen(tab) ; i++)
        {
            nombrehache += tab[i];
        }
       //nombrehache %= ID;
       fprintf(fl, "### HashKey brut = %d ###", nombrehache);
       //fprintf(fl, "### HashKey net = %d ###", (nombrehache%ID));
     
       //return nombrehache % ID;
       return 1 ;
       }*/
     
        /************************Nombre de block pour allocation dynamique**********************/
    int cpteblocks(void)
    {
     
    	char lignelue [256];
    	int nb_blocks=0;
    	FILE* batchFile;
    	batchFile=fopen("D:\\xxx\\xxx\\xxx\\batch_loader_turc.txt","r");
     
        while(fgets(lignelue, 80, batchFile) != NULL) {
     
            if(strstr(lignelue, "ADD") != NULL) {
    			nb_blocks ++;
    		}
    	}
     
    	fclose(batchFile) ;
    	batchFile=NULL;
     
    	return nb_blocks;
    }
        /**************************Fonction main**************************************************/
     
    int main()
    {
        char * ligne_lue ;
        FILE * fileLog;
     
        /**************************Tests & Ecriture dans les structures******************************/
        applications * * tabApp = NULL ;
        applications * app = NULL ;
        char * * tab_id ;
        int bloc=0 ;
        int j=0 ;
        int blocks = 0 ;
        int nbApp = 0 ;
        char * p;
     
     
        blocks = cpteblocks() ;
     
        fileLog = fopen ("D:\\xxx\\xxx\\xxx\\batch_loader_LOG.txt","w+");
    	//printf("### Nombre d'ADD dans le fichier : %d\n\n",blocks);
        fprintf(fileLog, "### Nombre d'ADD dans le fichier : %d\n\n",blocks);
     
        tabApp = malloc((blocks)*sizeof(applications)) ;//Allocation dynamique pour tableau de structure
        FILE* batch;
        batch=fopen("D:\\xxx\\xxx\\xxx\\batch_loader_turc.txt","r");
     
     
        /****************************Test de lecture fichier*****************************************/
     
        if (batch==NULL)
        {
            fputs("erreur a l'ouverture du fichier\n",stderr);
            return EXIT_FAILURE;
        }
     
        ligne_lue = malloc(80*sizeof(char)) ;
        tab_id = malloc((blocks) * sizeof(char*));
        while((fgets(ligne_lue, 80, batch) != NULL)) {
            p = strchr(ligne_lue,'\n');
            if(p == NULL){
                // Identification d'une nouvelle Application
                if(strstr(ligne_lue, "ADD") != NULL) {//Rentrer dans la boucle si la ligne lue est ADD
                    // Si c'est la première application de l'extract, alors il n'y a encore rien a stocker
                    // Sinon on stocke l'application qui vient d'être récupérée
                    if((bloc != 0) && (app != NULL)) {
                        tabApp[nbApp] = malloc(sizeof(applications)) ;
                        tabApp[nbApp++] = app ;
                    }
                    bloc=0 ;
                    //nbApp++ ;
                    // Nouvelle Application a lire
                    app = malloc (sizeof(applications)) ;
                    // Agrandissement de la table du tableau de stockage des applications
                    //tabApp = realloc(tabApp, nbApp*(sizeof(applications))) ;
                }else{
                    switch(bloc++){
                        case 0:
                            strcpy(app->id, trim(ligne_lue));
                            //printf("ID >> %s\n\n",app->id);
                            fprintf(fileLog, "ID >> $%s$\n\n",app->id);
                            tab_id[nbApp] = malloc(strlen(trim(ligne_lue+1))) ;
                            strcpy (tab_id[nbApp], trim(ligne_lue));
                            break;
                        case 1:
                            strcpy(app->descr, trim(ligne_lue));
                            //printf("DESC >> %s\n\n",app->descr);
                            fprintf(fileLog, "DESC >> $%s$\n\n",app->descr);
                            break;
                        case 2:
                            strcpy(app->owner, trim(ligne_lue));
                            //printf("OWNER >> %s\n\n",app->owner);
                            fprintf(fileLog, "OWNER >> $%s$\n\n",app->owner);
                            break;
                        default:
                            //printf("FIRSTCAR >> %c\n\n",ligne_lue[0]);
                            if(ligne_lue[0]!='\'') {
                                strcpy(app->preid, trim(ligne_lue));
                                //printf("PREID >> %s\n\n",app->preid);
                                fprintf(fileLog, "PREID >> $%s$\n\n",app->preid);
                            }
                            break;
                        }
                }
           }
        }
     
        tabApp[nbApp] = malloc(sizeof(applications)) ;
        tabApp[nbApp] = app ;
     
        //tab_id = malloc ((ID+1)* sizeof(int));
        //tab_id = calloc ((nbApp+1), sizeof(int));
     
        //printf("%d",ID);
        //fprintf(fileLog, "##ID=%d##\n",ID);
     
     
        for(j=1;j<=nbApp;j++) {
            //if(strcmp((tabApp[j])->id, "XXXXNURADPREB01J") ==0) {
            if(strcmp(tab_id[j], "XXXXNURADPREB01J") ==0) {
                fprintf(fileLog, "Trouvé %s!!", (tabApp[j])->id);
            }
            //printf("New APP :\n##\nID=%s\n##DESC=%s\n##OWNER=%s\n##PREID=%s\n",(tabApp[j])->id,(tabApp[j])->descr,(tabApp[j])->owner,(tabApp[j])->preid);
        }
     
        fclose(batch) ;
        fclose(fileLog) ;
     
        batch=NULL;
        char trash [10] ;
        printf("Fin de Traitement.\n") ;
        scanf("%s", trash) ;
        free(app) ;
        free(tabApp) ;
        free (tab_id) ;
     
        return 0 ;
    }

  11. #31
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Super !
    Ca va faciliter beaucoup de choses !
    Ce qui serait top, ce serait que tu montres aussi ce que tu parses là-dedans (si c'est le résultat de ton JCL, balance 2 applis et modifie leurs noms)

    Mais je pense que la 1ère erreur se trouve là (ligne 128) : (ça n'est qu'un problème de logique, mais pas du segfault recherché)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne_lue = malloc(80*sizeof(char)) ;
    Il "faut" malloquer 80 + 1 caractères comme le disent tous les autres ! (ce sont bien des fichiers avec des lignes de 80 caractères + le retour à la ligne une fois transféré sur de l'open)
    Le caractère supplémentaire qui est ajouté dans ta variable est le '\0' qui indique la fin de chaîne.

    Sur z/OS tu n'en as effectivement pas besoin "car" on connait d'avance la taille de la donnée, mais pas sur les autres systèmes où il faut indiquer la fin.


    EDIT : je suis allé trop vite (comme d'hab'), mais tu peux avoir un comportement bizarre dû à la lecture de 80 - 1 caractères par fgets (du coup il te restera le dernier caractère tout seul suivi d'un retour chariot)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  12. #32
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Voici le type de txt que je parse. Donc il faudrait que je lise 79 caractère par fgets?

    ADD
    APPLI1
    'Extraction TWS '
    'GroupE '
    'Début application '
    'Extraction plan '
    'Extraction debut/fin job'
    'Fin application

  13. #33
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Nonononon, actuellement ton fgets prends 79 caractères depuis le txt, et y ajoute un '\0'. (donc 80 caractères)
    Ton malloc est donc impeccable.

    Mais si ton txt contient bel et bien pleins d'espaces (tu peux le vérifier en ouvrant dans le bloc note et en regardant jusqu'où va le curseur après ton ADD), chaque ligne est constituée de 80 caractères + un retour à la ligne => 81
    Donc ton fgets "devrait" prendre en paramètre 82, et ton malloc aussi.

    Je pense que ton fichier ressemble à ça pour être exact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ADD                                                                            
    APPLI1                                                                         
    'Extraction TWS '                                                              
    'GroupE '                                                                      
    'Début application '                                                           
    'Extraction plan '                                                             
    'Extraction debut/fin job'                                                     
    'Fin application

    Enfin ce n'est pas important ça, il faut plutôt chercher où est-ce que ça segfault pour le moment
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  14. #34
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Vous êtes tous des championsssssssssss.



    Ca marche !!!!

    Vous l'avez bien mérité votre

  15. #35
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Quoi ?
    C'était juste malloc de 82 et fgets de 82 ?! X_x

    Dr Memory ne dit plus rien à l'exécution ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  16. #36
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Non

    Le problème du débutant, je pense il voit le return 0 et il dit a tout le monde qu'il a trouvé.En fait avec le fgets et malloc 82, cela ne fait pu de segmentation fault (appuyé par dr memory) mais il ne peut entrer dans le boucle *p puisque le \n doit être compris dedans.

    Un soucis en appelant un autre quand on supprime le le *p qui permettait de ne pas prendre le \n => segmentation fault

    Je ne vais pu avoir accès a mon envirronement de dev mais si vous avez des idées je l'ai mettrait en pratique des demain.

    Merci a tous en tout cas pour votre patience et votre aide

  17. #37
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nysay27 Voir le message
    Je ne comprends pas la remarque si strlen renvoie une chaîne vide puisqu'en effet j'ai spécifier que le code marche en debuger...
    Il faut absolument que tu comprennes une chose primordiale: quand tu fais quelque chose d'illégal tu produis un comportement indéterminé ; c'est à dire totalement imprévisible. Tu ne peux donc pas le prédire. Tu ne peux même pas dire que ça va crasher car ça peut ne pas crasher. Ou ça peut crasher les jours pairs et fonctionner les jours impairs. Ou ça peut crasher chez-toi mais pas chez le copain. Ou ça peut fonctionner en mode debug et crasher en mode normal.
    Donc le débugguer te détecte un truc d'illégal tu le corriges et une fois corrigé tu peux estimer ce qui va se passer. Mais tant que ce n'est pas corrigé tu ne peux absolument pas demander "pourquoi ça fait quand-même ceci ou cela" parce que personne ne peut te répondre...

    Citation Envoyé par nysay27 Voir le message
    mais si vous avez des idées je l'ai mettrait en pratique des demain.
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tabApp[nbApp] = malloc(sizeof(applications)) ;
    tabApp[nbApp] = app ;
     
    //tab_id = malloc ((ID+1)* sizeof(int));
    //tab_id = calloc ((nbApp+1), sizeof(int));
    Ca ne te choque pas ces deux instructions (enfin surtout la seconde !!!) en ligne 179 et 180 ??? Déjà rien que d'écrire var=5; var=6; moi ça me hérisse car j'ai une instruction d'inutile (généralement la première). Mais dans ton cas là, tu perds la zone allouée.
    Je ne parlerai pas des deux autres car elles sont en commentaire mais j'espère quand-même que personne ne les enlèvera jamais ces commentaires !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Code::Blocks] Erreur fonction résultat
    Par Lastshadow dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 24/01/2012, 21h31
  2. Réponses: 3
    Dernier message: 10/05/2011, 21h01
  3. Réponses: 7
    Dernier message: 28/04/2011, 17h52
  4. Mon code fonctionne en mode debug et pas en release
    Par teddyalbina dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 22/02/2011, 00h16
  5. Réponses: 13
    Dernier message: 22/10/2010, 23h26

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