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

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

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    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 expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    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
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    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 du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    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 du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    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 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    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.

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

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    J'aimerais afficher toutes les valeurs d'une fonction glutGet qui prend en argument le premier string de chaque ligne d'un fichier glutGet.txt qui se présente comme tel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GLUT_SCREEN_WIDTH Width_in_pixels_of_the_current_window
    GLUT_SCREEN_HEIGHT1 Height_in_pixels_of_the_current_window
    GLUT_WINDOW_X X_location_in_pixels_(relative_to_the_screen_origin)_of_the_current_window
    GLUT_WINDOW_Y Y_location_in_pixels_(relative_to_the_screen_origin)_of_the_current_window
    ....
    # à chaque fois deux string séparé d'un espace.


    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
    /**
    * affichage des informations de l'écran GL.
    * @param chemin du fichier.csv
    */
    void windowFunction(char* sourcesPath){
    			int val, argumentLen;
    			char *newFunction = NULL;
    			char 	argument[50],
    			 	description[1000];
    			FILE *file = NULL;
    	    file = fopen(sourcesPath, "r"); /* read file */
    	    if (file == NULL){
    				   exit(1);
    			}
    			else {
    				do{
    				fscanf(file, "%s %s", argument, description);
    							argumentLen = strlen(argument) + 1;
    							newFunction = (char*)malloc(argumentLen * 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);
    }
    Ici j'ai gardé le malloc mais j'ai ajouté strlen(argument) + 1 pour la ligne en cours de lecture

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ça ne marchera pas, GLEnum est un type entier, ce n'est pas supposé être une chaîne de caractères.
    Si tu veux pouvoir appeler glutGet sur une valeur lue depuis un fichier texte, tu dois d'abord récupérer la valeur entière associée à cette chaîne.

    Et pour ça, il faudra que tu te constitues un dictionnaire (tu dois pouvoir récupérer les associations entre chaîne et nombre en examinant le fichier d'en-tête contenant GLUT_WINDOW_X, ou en contournant le problème).
    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.

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

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Oui, vous avez raison, j'obtient bien la même valeur à partir de celle que j'ai trouvé dans freeglut_std.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int val = glutGet(GLUT_WINDOW_X);
    printf("%d", val);
    int val2 = glutGet(0x0064);
    printf("%d", val2);

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

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    voilà à quoi ressemble mon nouveau fichier.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    0x0066 GLUT_SCREEN_WIDTH Width_in_pixels_of_the_current_window
    0x00C9 GLUT_SCREEN_HEIGHT Height_in_pixels_of_the_current_window
    0x0064 GLUT_WINDOW_X X_location_in_pixels_(relative_to_the_screen_origin)_of_the_current_window
    0x0065 GLUT_WINDOW_Y Y_location_in_pixels_(relative_to_the_screen_origin)_of_the_current_window
    ...
    et la fonction :
    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
     
    void windowFunction(char* sourcesPath){
    			int val;
    			int glenum = NULL;
    			//char *newFunction = NULL;
    			char 	argument[50],
    			 	description[1000];
    			FILE *file = NULL;
    	    file = fopen(sourcesPath, "r"); /* read file */
    	    if (file == NULL){
    				   exit(1);
    			}
    			else {
    				do{
    							fscanf(file, "%d %s %s",glenum, argument, description);
    							//argumentLen = strlen(argument) + 1;
    							//newFunction = (char*)malloc(argumentLen * sizeof(char));
    							//strcpy(newFunction, argument);
    							//printf("salut la new funct est %s \n", newFunction);
    							//sprintf(newFunction, "%s", argument);
    							val = glutGet(glenum);
    							printf("%d\n", val);
    				}while(!feof(file)); // tester la fin d'un fichier*/
    				fclose(file); /* fermer un fichier ouvert */
    			}
          free(newFunction);
    }
    Voici le message d'erreur que j'ai : Erreur de segmentation (core dumped).

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Vu que tu as inclu le préfixe, je crois que c'est plutôt %i qu'il faut utiliser, pas %d.
    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.

  12. #12
    Membre actif
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Points : 214
    Points
    214
    Par défaut initialisation de l'entier
    Tu initialise ton entier à NULL normalement cette constante (qui vaut en principe 0) n'est à utiliser que pour les pointeurs.
    De plus dans ton appel à fscanf tu as oublié de donner une adresse (il manque le '&') pour les chaines de caractéres ce n'est pas nécessaire
    car le nom d'un tableau (ici de caractéres) est implicitement equivalent a &tab[0].

  13. #13
    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
    Déjà, en indentant le code, c'est bien plus joli à regarder et facile à comprendre :
    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
    #include <stdlib.h>
    #include <stdio.h>
     
    void windowFunction(char* sourcesPath){
    	int val;
    	int glenum = NULL;
    	//char *newFunction = NULL;
    	char 	argument[50],
    	description[1000];
    	FILE *file = NULL;
    	file = fopen(sourcesPath, "r"); /* read file */
     
    	if (file == NULL){
    		exit(1);
    	}
    	else {
    		do{
    			fscanf(file, "%d %s %s",glenum, argument, description);
    			//argumentLen = strlen(argument) + 1;
    			//newFunction = (char*)malloc(argumentLen * sizeof(char));
    			//strcpy(newFunction, argument);
    			//printf("salut la new funct est %s \n", newFunction);
    			//sprintf(newFunction, "%s", argument);
    			val = glutGet(glenum);
    			printf("%d\n", val);
    		}while(!feof(file)); // tester la fin d'un fichier*/
     
    		fclose(file); /* fermer un fichier ouvert */
    	}
     
    	free(newFunction);
    }
    Ensuite, ce code ne compile pas correctement :
    prog.cc: In function 'void windowFunction(char*)':
    prog.cc:6:15: warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]
        6 |  int glenum = NULL;
          |               ^~~~
    prog.cc:18:19: warning: format '%d' expects argument of type 'int*', but argument 3 has type 'int' [-Wformat=]
       18 |    fscanf(file, "%d %s %s",glenum, argument, description);
          |                  ~^        ~~~~~~
          |                   |        |
          |                   int*     int
    prog.cc:24:10: error: 'glutGet' was not declared in this scope
       24 |    val = glutGet(glenum);
          |          ^~~~~~~
    prog.cc:31:7: error: 'newFunction' was not declared in this scope; did you mean 'windowFunction'?
       31 |  free(newFunction);
          |       ^~~~~~~~~~~
          |       windowFunction
    1
    Evidemment, l'erreur pour gluGet() se règle avec une déclaration au début de mon fichier (int glutGet(int);) mais quid de newFunction ?

    As-tu bien activé les options de warning de ton compilateur (-Wall -Wextra pour GCC par exemple) ?

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

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Merci je ne connaissais pas le flag -Wextra. Je l'ai ajouté à mon makefile mais mis à part quelques variables inutilisées (forcément je travaille dessus), ça n'as pas fait grand chose.

    La fonction dans mon fichier 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
    /**
    * affichage des informations de l'écran GL.
    * @param chemin du fichier.csv
    * @return les valeurs de la fonction glutGet.
    * @Discussion https://www.developpez.net/forums/d1967023/c-cpp/c/stack-smashing-detected-unknown-terminated/#post10919586
    */
    void windowFunction(char* sourcesPath){
    			int i = 0;
    			int val;
    			int* newFunction = NULL;
    			newFunction = (int*)malloc(50 * sizeof(int));
    			char 	argument[50],
    			 	description[1000];
    			FILE *file = NULL;
    	    file = fopen(sourcesPath, "r"); /* read file */
    	    if (file == NULL){
    				   exit(1);
    			}
    			else {
    				do{
    							fscanf(file, "%d %s %s",&newFunction[i], argument, description);
    							val = glutGet(newFunction[i]);
    							printf("%i\n", val);
    							i++;
    				}while(!feof(file)); // tester la fin d'un fichier*/
    				fclose(file); /* fermer un fichier ouvert */
    			}
          free(newFunction);
    }
    Fonction appelée dans la fonction main :
    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
    int main(int argc, char** argv) {
    		//char newPlayer;
        int jeu_lance = NON;
        printf("Bonjour, voulez vous lancez le jeu ? ");
        scanf("%d", &jeu_lance);
        if(jeu_lance == OUI)
        {
    	printf("Quel est votre nom de player ? ");
    	scanf("%s", player);
    
    	glutInit(&argc, argv); /* initialisation de GLUT : argc et argv sont respectivement
              * le nombre et la liste des paramètres passées en ligne de commande */
    
              glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
              glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    
              /* Creer un écran centré */
              unsigned int Largeur_Ecran_x = glutGet(GLUT_SCREEN_WIDTH);
              unsigned int Hauteur_Ecran_Y = glutGet(GLUT_SCREEN_HEIGHT);
              unsigned int position_centree_X = (Largeur_Ecran_x-WINDOW_WIDTH)/2;
              unsigned int position_centree_Y = (Hauteur_Ecran_Y-WINDOW_HEIGHT)/2;
              glutInitWindowPosition(position_centree_X, position_centree_Y); /* Position d'initialisation en haut à gauche du coin de mon écran. */
    
          	  glutCreateWindow("JUMPING_BANANA_JACQUETS_Prog2_IHDCB132"); /* créer la fenètre */
    
    					//re_move("data/test.test");
    					//readByCharacter("data/glutGet.txt");
    
    	windowFunction("data/glutGet.txt") ;
    
    				//int val = glutGet(GLUT_WINDOW_X);
    				//printf("%d", val);
    				//int val2 = glutGet(0x0064);
    				//printf("%d", val2);
    
    					// mode 2D avec glOrtho2D puis desactiver l'ecriture en ZBuffer
              init();
    					/* créer les rendus */
              glutReshapeFunc(reshape);  /* précise la fonction à utiliser pour le redimensionnement */
              glutDisplayFunc(display); /* précise la fonction à utiliser pour l'affichage */
              glutIdleFunc(display);
    
              glutTimerFunc(TIMER, timer, 0);
              glutTimerFunc(LONG_TIMER, longTimer, 0);
              glutTimerFunc(SCORE_TIMER, longerTimer, 0);
              glutTimerFunc(ENNEMI_POP_TIMER, ennemyTimer, 0);
    
    					/* lancer le programme à l'infini puis attendre les instructions de l'utilisateur */
              glutKeyboardFunc(keyboard);
              glutKeyboardUpFunc(keyboardUp);
    
              glutSpecialFunc(specialInput);
              glutSpecialUpFunc(specialInputUp);
    
              glutMainLoop();
    
    	clearEndGame();
        return 0;
        }
    }
    le fichier glutGet.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    0x0066 GLUT_SCREEN_WIDTH Width_in_pixels_of_the_current_window
    0x00C9 GLUT_SCREEN_HEIGHT Height_in_pixels_of_the_current_window
    0x0064 GLUT_WINDOW_X X_location_in_pixels_(relative_to_the_screen_origin)_of_the_current_window
    0x0065 GLUT_WINDOW_Y Y_location_in_pixels_(relative_to_the_screen_origin)_of_the_current_window
    ....
    Utilisation de make avec CFLAGS = -std=c99 -lglut -lGL -lGLU -lpng -Wall -Wextra -g
    Le message d'erreur est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    freeglut (./jb): glutGet(): missing enum handle 0
    -1
    Erreur de segmentation (core dumped)
    Je présume qu'en le plaçant à l'heure de maintenant dans la main; ça fait planter le programme. Malheureusement, cette fonction ne m'est plus trop utile pour le moment. J'en avait besoin au début que je construisais mon jeux mais l'échéance est dans une semaine donc je vais me concentrer sur autre chose. Si vous constatez une erreur qui m'as échappée. N'hésitez pas à me le signaler. Merci d'avance

  15. #15
    Membre actif
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Points : 214
    Points
    214
    Par défaut
    Pour lire des valeurs hexadécimales il faut utiliser '%x' par contre je ne me souvient plus s'il faut enlever dans ton fichier texte le 0x en préfixe mais c'est bien possible.
    Il y a sans doute d'autre problèmes vu qu'il y a une erreur de segmentation mais tu peux commencer par ça.
    Ta variable newFonction n'a pas besoin d'être alloué dynamiquement vu que tu connais la taille à l'exécution.
    Utilises plutôt

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

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -1
    freeglut (./jb): glutGet(): missing enum handle 6449711
    Merci de ta réponse, l'erreur de segmentation vient de cette fonction. Avec %x, je constate que le valeur après missing enum handle est différente de 0.

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

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    -1
    freeglut (./jb): glutGet(): missing enum handle 6449711
    ...
    Erreur de segmentation (core dumped)
    Même chose lorsque j'enlève tous les 0x devant puis que je remplace par %x.

  18. #18
    Membre actif
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Points : 214
    Points
    214
    Par défaut
    Ton programme ne fait rien du tout et plante directe ?

    PS : peux-tu afficher newFunction[i] en hexa (avec '%x') avant l'appel à gluget s'il te plait.

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

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    				int val = glutGet(GLUT_WINDOW_X);
    				printf("%d", val);
    				int val2 = glutGet(0x0064);
    				printf("%d", val2);
    la réponse est 183 pixels pour les deux.

    Le programme fonctionne très bien sans cette fonction. Bon tant pis, je reviendrais dessus plus tard.

    Merci, ce topic ext résolu bien que je ne comprend pas ce qui cloche avec cette fonction.

    En fait, cela fonctionne avec %d et %x, avec ou sans 0x.

  20. #20
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Si tu lis un 0x154 avec %d, tu liras un joli 0. x n'est pas un chiffre.

    Ta variable newFonction n'a pas besoin d'être alloué dynamiquement vu que tu connais la taille à l'exécution.
    newFunction n'a même pas lieu d'être un tableau tout court. L'entrée i est utilisée une unique fois dans la boucle.
    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.
Page 1 sur 2 12 DernièreDernière

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