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 :

Programme qui plante sur des pointeurs de pointeurs


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Programme qui plante sur des pointeurs de pointeurs
    Bonjour,

    j'ai un problème avec mon programme, j'ai utiliser un pointeur de pointeur sur une structure que j'ai créé, et quand je l'utilise, mon programme freeze, impossible de l'arreter (même avec un ctrl +c, obligé de le kill)

    donc je souhaiterais savoir si quelqu'un voit où j'ai fais une erreur

    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
     
    int zombie_count=0;
    int max_zombie=5;
     
    ENTITY **zombie_test;
     
    ...
     
        if(key[KEY_L]){
          zombie_test=(ENTITY**)malloc(max_zombie*sizeof(ENTITY*));
          //zombie_test=malloc(max_zombie*sizeof(ENTITY));
          int i=0;
          for(i=0;i<max_zombie;i++){
    	*(zombie_test+i)=(ENTITY*)malloc(sizeof(ENTITY));
    	create_enemy(&(zombie_test[i]));
          }
    }
     
    {
     int i;
          for(i=0;i<zombie_count;i++){
    	if(*zombie_test==NULL){
    	  (*zombie_test+i)->x+=distance_sprite_hero;
    	  zombie_move(buffer,*zombie_test+i,&sprite,&speed,gravite,rectangles,distance_sprite_hero);
    	}
          }
    }
    Voila, donc si vous avez un indice, je suis prenneur !
    Bonne journée !

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Difficile de dire quelque chose avec si peu d'informations.
    Par contre, ceci est assez étrange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	  (*zombie_test+i)->x+=distance_sprite_hero;
    	  zombie_move(buffer,*zombie_test+i,&sprite,&speed,gravite,rectangles,distance_sprite_hero);
    n'est-ce pas plutôt *(zombie_test+i) ou si on préfère zombie_test[i] ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour la reponse, deja, mon programme ne segfault plus.
    Bon pour le reste, désolé pour le manque d'info (je suis tellement dedans que je manque un peu de recul), donc mon programme utilise la librairie allegro (d'où les key[KEY_L])

    Pour les fonctions, voici leurs entete tirées des .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void zombie_move(BITMAP* buffer,ENTITY* zombie,ENTITY* hero,VECTOR* speed, FORCE gravite,RECTANGLE* rectangles,int offset);
    void  *create_enemy(ENTITY* z);
    Avant d'essayer sur un pointeur de pointeur, j'ai deja essayé sur un pointeur simple, et ça fonctionne.

    D'ailleurs, en relisant mon post il me semble deja reperer une erreur, donc finalement voici mon code actuel :

    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
    int zombie_count=0;
    int max_zombie=5;
     
    ENTITY **zombie_test;
     
    ...
        //Faire spawner un zombie
        if(key[KEY_L]){
          zombie_test=(ENTITY**)malloc(max_zombie*sizeof(ENTITY*));
          //zombie_test=malloc(max_zombie*sizeof(ENTITY));
          int i=0;
          for(i=0;i<max_zombie;i++){
    	zombie_test[i]=(ENTITY*)malloc(sizeof(ENTITY));
    	create_enemy((zombie_test[i]));
          }
    }
     
     {
          int i;
          for(i=0;i<zombie_count;i++){
    	if(*zombie_test==NULL){
    	  zombie_test[i]->x+=distance_sprite_hero;
    	  zombie_move(buffer,zombie_test[i],&sprite,&speed,gravite,rectangles,distance_sprite_hero);
    	}
          }
        }
    Sinon, voici comment j'ai déclaré ma structure ENTITY :

    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
     
    typedef struct{
     
      //sprites de l'entity
     
       BITMAP* sprite_array[10];
     
      // position du sprite
      double x,y;
     
      // taille du sprite
      int w, h;
     
      // collisions
      int left;
      int right;
      int up;
      int down;
      int collision;
     
      // Colliding rectangles
      RECTANGLE colliding_rect1;
      RECTANGLE colliding_rect2;
      RECTANGLE colliding_rect3;
      RECTANGLE colliding_rect4;
     
      // états du perso
      int jumping;
      int onground;
      int downing;
      int uping;
      int double_jump;
      int lefting;
      int righting;
      int idling;
      int life;
      int shooting;
      int is_hit;
      double mouse_pointing_x;
      double mouse_pointing_y;
     
     
      // Double jump
      int double_jump_enable;
     
     
      //Shoot
      double shooting_x;
      double shooting_y;
      double shooting_origin_x;
      double shooting_origin_y;
      double shooting_increment_x;
      double shooting_increment_y;
      WEAPON arme;
      RECTANGLE bullet_rect;
     
     
    }ENTITY;

Discussions similaires

  1. Algorithmes sur des conteneurs de pointeurs
    Par Trunks dans le forum SL & STL
    Réponses: 9
    Dernier message: 17/02/2009, 02h01
  2. programme qui plante. chercher/remplacer dans des fichiers.
    Par [Hugo] dans le forum Général Python
    Réponses: 2
    Dernier message: 31/10/2006, 17h10
  3. [Studio .NET] Executable qui marche sur des PC différents
    Par black is beautiful dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 05/10/2005, 17h00
  4. VBA,Graphiques :Series qui pointent sur des Range Discontinu
    Par CCHEVALIER dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/09/2005, 14h05
  5. Programme qui plante
    Par harris_macken dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2005, 23h50

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