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 :

entrer un tableau de structure dans une f(x)


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Par défaut entrer un tableau de structure dans une f(x)
    Bonjour bonjour, alors voilà mon soucis, j'ai fait un programme qui marche mais qui est disons un peu en bordel.

    Vu que ça risque de devenir compliqué pour m'y retrouver j'ai décidé de faire une "optimisation" et de transformer une partie en fonctions histoire que ça soit ranger et de plus pas user trop de mémoire avec des variables qui pourraient me servir qu'une fois

    le soucis c'est que bah a un des passages en fonction ça marche plus ^^' , en fait le build ne marque aucune erreur, et j'arrive pas à trouver l'erreur ( c'est assez compliqué pour moi vu que je fait rentrer dans la fonction en question une adresse de tableau de structure (oui oui un peu galère))

    voici les différents codes
    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
    typeIA liste_IA[Nbre_noms];
    anti_collision(Nbre_noms,map_x,map_y,liste_IA);
     
    void anti_collision(int taille_pseudo_tableau,int dimension_x,int dimension_y,typeIA structure[])
    {
        int i=0,g,a,sortie=1;
        int tab_x[dimension_x];
        int tab_y[dimension_y];
     
     
    for (g=0 ; g<(taille_pseudo_tableau-1) ; g++)
         {
          tab_x[g] = structure[i].x;
          tab_y[g] = structure[i].y;
          do
          {
            for(a=0 ; a<=i; a=a+1)
            {
                    if (tab_x[g] == structure[a].x && g!=a)
                    {
     
     
                                if(tab_y[g]== structure[a].y)
                                {
                                structure[i].y=(structure[i].y)+1;
                                tab_y[g]=structure[i].y;
                                structure[i].x=structure[i].x+1;
                                tab_x[g]=structure[i].x;
                                sortie=0;
                                }
                                else
                                {
                                sortie=1;
                                }
     
    // permet de se débarasser des collisions
                    }
                    else
                    {
                    sortie=1;
                    }
            }
          }
          while(sortie!=1);
          i=i+1;
         }
     
    }
    voilà, je vous ai mis juste la partie importante, typeIA est un type structure

    quand j'ai utiliser le mode debugger je tombe sur une erreur de segmentation

    si vous pouviez me dire ( pas pourquoi ça cloche, parce que c'est pratiquement sûr à 99% que c'est la façon dont j'écris listeIA en paramètre et comment la variable structure doit être écrite) comment écrire donc le paramètre d'entrer ainsi que la forme qu'il doit prendre à l'intérieur de la fonction pour que ça marche, ce serait sympa de votre part =)

    merci d'avance

  2. #2
    Membre éclairé Avatar de c1702
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut
    Bonjour,

    Je n'ai pas cherché à comprendre ta fonction, mais je vois déjà un souci, du moins je crois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    int tab_x[dimension_x];
    int tab_y[dimension_y];
     
    for (g=0 ; g<(taille_pseudo_tableau-1) ; g++)
    {
         tab_x[g] = structure[i].x;
         tab_y[g] = structure[i].y;
    ...
    Si tu déclares tab_x de taille dimension_x, tab_y de taille dimension_y et du accèdes aux éléments entre 0 et taille_pseudo_tableau - 1, soit tu as 3 paramètres identiques (dimension_x, dimension_y et taille_pseudo_tableau), soit tu risques de déborder de ton tableau si dimension_x ou dimension_y est inférieur à pseudo_tableau (et les cases supérieures ne serviront à rien dans le cas contraire). Au mieux (çàd avec la condition précédente vérifée) ça me semble dangereux comme façon de procéder.

    Clément.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Par défaut
    Citation Envoyé par c1702 Voir le message
    Bonjour,

    Je n'ai pas cherché à comprendre ta fonction, mais je vois déjà un souci, du moins je crois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    int tab_x[dimension_x];
    int tab_y[dimension_y];
     
    for (g=0 ; g<(taille_pseudo_tableau-1) ; g++)
    {
         tab_x[g] = structure[i].x;
         tab_y[g] = structure[i].y;
    ...
    Si tu déclares tab_x de taille dimension_x, tab_y de taille dimension_y et du accèdes aux éléments entre 0 et taille_pseudo_tableau - 1, soit tu as 3 paramètres identiques (dimension_x, dimension_y et taille_pseudo_tableau), soit tu risques de déborder de ton tableau si dimension_x ou dimension_y est inférieur à pseudo_tableau (et les cases supérieures ne serviront à rien dans le cas contraire). Au mieux (çàd avec la condition précédente vérifée) ça me semble dangereux comme façon de procéder.

    Clément.

    oh my god o.o , putain j'arrive à faire de ces erreurs d'inattention parfois, merci en tout cas, c'était ça T.T ( je vais aller me pendre en paix maintenant )

    un grand merci en tout cas

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Sinon, juste pour que tes futures nuits ne soit pas trop pourries.

    la phrase "qui marche, mais n'est pas très propre" n'est jamais valable.

    Un code est systématiquement limpide ou faux. (parfois les deux, mais jamais aucun)

    Code proprement, et tu auras de nombreux soucis en moins. Tu pourras en effet prouver que telle portion de ton code est sans erreur, exposer sa logique, la documenter, la réutiliser, bref, lui faire confiance.
    Mieux, n'importe qui d'autre pourra en faire autant.

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

Discussions similaires

  1. tableau de structure dans une structure
    Par igloo2 dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2013, 18h25
  2. Tableau de structures dans une structure
    Par adrienmgs dans le forum Débuter
    Réponses: 8
    Dernier message: 03/04/2011, 00h48
  3. Réponses: 1
    Dernier message: 29/06/2007, 15h13
  4. Tableau non contraint dans une structure
    Par chronos dans le forum C
    Réponses: 8
    Dernier message: 07/06/2007, 17h44
  5. Réponses: 6
    Dernier message: 16/02/2006, 14h40

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