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 :

* stack smashing detected *: <unknown> terminated


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Par défaut * stack smashing detected *: <unknown> terminated
    Bonjour, gcc m'indique *** stack smashing detected ***: <unknown> terminated avec cette fonction.
    J'alloue surement pas assez de mémoire pour ma variable newFunction mais je ne vois pas comment améliorer tout ça (à cet heure) .

    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
    /**
    * affichage des informations de l'écran GL.
    * @param chemin du fichier.csv
    */
    void windowFunction(char* sourcesPath){
    			int val;
    			char *newFunction = NULL;
    			char 	argument[40],
    			 	description[100];
    			FILE *file = NULL;
    	                file = fopen(sourcesPath, "r"); /* read file */
    	                if (file == NULL) 
                                     exit(1);
    			else {
    				do{
    				fscanf(file, "%s %s", argument, description);
    							newFunction = (char*)malloc(sizeof(char));
    							//strcpy(newFunction, argument);
    							printf("salut la new funct est %s \n", newFunction);
    							sprintf(newFunction, "%s", argument);
    							val = glutGet(newFunction);
    							printf("%d\n", val);
    				}while(!feof(file)); // tester la fin d'un fichier*/
    				fclose(file); /* fermer un fichier ouvert */
    			}
                            free(newFunction);
    }

  2. #2
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 786
    Par défaut
    Hello,

    Ligne 17: tu alloues 1 octet pour newFuction, que tu n'initialises pas.
    Ligne 19: tu fais un printf() de newFunction, mais il n'y a peut-être de pas de \0 dans le string
    Ligne 20: il n'y a sans doute pas assez de place pour copier argument dans newFunction

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Aussi, es-tu 100% sûr que les lignes de ton fichier en dépassent pas les 40 et 100 caractères?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre confirmé
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Par défaut
    Bonjour, voici quelques une des lignes de mon fichiers. Les fonctions ne dépasse pas les 40 caractères enfin max 30 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GLUT_WINDOW_ACCUM_RED_SIZE Number_of_bits_of_red_stored_in_the_current_window's_accumulation_buffer._Zero_if_the_window_is_color_index
    GLUT_WINDOW_ACCUM_GREEN_SIZE Number_of_bits_of_green_stored_in_the_current_window's_accumulation_buffer._Zero_if_the_window_is_color_index
    GLUT_WINDOW_ACCUM_BLUE_SIZE Number_of_bits_of_blue_stored_in_the_current_window's_accumulation_buffer._Zero_if_the_window_is_color_index
    GLUT_WINDOW_ACCUM_ALPHA_SIZE Number_of_bits_of_alpha_stored_in_the_current_window's_accumulation_buffer._Zero_if_the_window_is_color_index
    J'avais complètement oublié cette partie. En fait, j'avais pas très bien compris pourquoi disais t'on que j'allouais seulement un octet ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *newFunction = NULL;
    ...
    newFunction = (char*)malloc(sizeof(char));
    J'initialise bien à NULL un pointeur vers un tableau de futur caractères.

    Ok ok j'alloue à la taille d'un char, 1 mot, 1 octet ... mais je ne sais pas comment m'y prendre pour allouer à la bonne taille...

  5. #5
    Membre confirmé
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Par défaut
    Je ne serrais pas le faire pour le moment mais je vais essayer ceci tout à l'heure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #define MAX 200
     
    char *newFunction = NULL;
    ...
    			char 	argument[MAX],
    			 	description[MAX];
    ...
    newFunction = (char*)malloc(MAX * sizeof(char));

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Pourquoi newFunction aurait besoin d'une allocation dynamique, à fortiori de taille fixe, quand description et argument sont statiques ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. stack smashing detected lors d'une lecture de fichier
    Par Dave62 dans le forum Débuter
    Réponses: 5
    Dernier message: 06/11/2009, 13h50
  2. Probléme * stack smashing detected *
    Par Mat262 dans le forum Débuter
    Réponses: 13
    Dernier message: 23/12/2008, 21h34
  3. Problème de "stack smashing detected"
    Par Mr Light dans le forum C++
    Réponses: 9
    Dernier message: 29/02/2008, 09h09
  4. stack smashing detected et sscanf
    Par vinzzzz dans le forum Bibliothèque standard
    Réponses: 34
    Dernier message: 03/12/2007, 16h50
  5. "stack smashing detected" encore...
    Par incal dans le forum Débuter
    Réponses: 11
    Dernier message: 01/10/2007, 17h53

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