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 :

pointeur et tableau


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut pointeur et tableau
    Salut à tous,

    Voilà je me met a programmer après quelques mois d'absence et les problème commence dès le debut

    voila la partie du programme qui bug :
    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
     
    int vecteurdirecteur(int *tabVD,int coordpion_x,int coordpion_y,int coordNewpion_x,int coordNewpion_y)
    {
    	printf("1OO\n");
    	tabVD[0]=(coordNewpion_x-coordpion_x);
    	printf("10\n");
    	tabVD[1]=(coordNewpion_y-coordpion_y);
    	printf("Les coordonnees du vecteur directeur sont [%d,%d]\n",tabVD[0],tabVD[1]);
    }
     
     
    int main ()
    {
      EffacerEcran;
    	int *tabVD[2]={0};
    	int coordpion_x;
    	int coordpion_y;
    	int coordNewpion_x;
    	int coordNewpion_y;
    	// menu();
    	initjeu();
    	afficher_plateau();
    	printf("Entrer les coordonées du pion que vous voulez faire bouger.\n");
     	scanf("%d%d",&coordpion_x,&coordpion_y);
     	printf("Entrer les nouvelles coordonées de ce pion.\n");
     	scanf("%d%d",&coordNewpion_x,&coordNewpion_y);
    	printf("100000\n");
          vecteurdirecteur(*tabVD,coordpion_x,coordpion_y,coordNewpion_x,coordNewpion_y);
          	return 0;
    }
    J'obtient une joli erreur de segmentation et je soupçonne ces 2 malfrat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabVD[0]=(coordNewpion_x-coordpion_x);
    	tabVD[1]=(coordNewpion_y-coordpion_y);
    Mais voilà je ne sais pas comment les réglés ;p.

  2. #2
    Expert confirmé
    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
    Par défaut
    Dans main(), tabVD est un tableau de deux pointeurs sur int initialisés à NULL
    Lors de l'appel à la fonction vecteurdirecteur(*tabVD,...) on passe la première valeur de ce tableau soit NULL (c'est équivalent à vecteurdirecteur(tabVD[0],...))
    Dans la fonction vecteurdirecteur(), tabVD est NULL et tabVD[0] (équivalent à *tabVD) tente de déréférencer un pointeur NULL -> Plantage

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    salut !
    ce serait bien de définir un type tab_t "tableau de 2 entiers" pour pouvoir définir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vecteur_directeur(tab_t *, int, int, int, int);
    tab_t tabVD;
    ...
    vecteurdirecteur(&tabVD,coordpion_x,coordpion_y, ...);
    A+

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Comme mis en évidence par Diogene, le problème vient probablement d'une confusion entre
    - tableau de 2 entiers int tabVD[2]; et
    - tableau de 2 pointeurs d'entiers int * tabVD[2];

    Une fois que cette erreur est comprise, le code peut être corrigé avec :
    - ligne 15 : int tabVD[2]={0,0}; //déclare et init un tableau de 2 entiers.
    - ligne 28 : vecteurdirecteur(tabVD,coordpion_x,coordpion_y,coordNewpion_x,coordNewpion_y);
    // passe l'adresse du tableau d'entier à la fonction.

    A voir également :
    - Le compilateur révèle également que la fonction vecteurdirecteur devrait retourner une valeur. (int d'après prototype).
    - Je ne suis pas sûr, mais je pense que ligne 4, les 'O' devrait être des '0'.

    Mon avis (qui n'engage que moi), l'utilisation d'un typedef ici n'apporterait pas grand chose,
    En effet la plupart des compilateurs ne feront pas de test sur la taille du tableau d'entier passé en paramètre.

    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
    typedef int tab_t[2]; 
    
    int vecteurdirecteur(tab_t tabVD,int coordpion_x,int coordpion_y,int coordNewpion_x,int coordNewpion_y)
    { //...
    }
      
    int main ()
    {
    	tab_t tabVD={0,0};
            int testVD[1] = {0,0};
             //...
            vecteurdirecteur(tabVD, /* ..*/);
            vecteurdirecteur(testVD, /* ..*/);  // aucune erreur/warning à la compilation
          	return 0;
    }
    Attention également à l'utilisation du typedef sur un tableau, corrigé dans l'exemple ci-dessous :
    - tab_t * tabVD est bien un pointeur sur un tableau à 2 entier.
    - tab_t tabVD est un tableau de 2 entiers.

Discussions similaires

  1. Réponses: 11
    Dernier message: 20/10/2006, 13h19
  2. Accès le plus rapide: Pointeur ou tableau?
    Par homeostasie dans le forum C
    Réponses: 21
    Dernier message: 01/09/2006, 14h08
  3. [VB.NET] Pointeur vers tableau
    Par b_lob dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/08/2006, 16h06
  4. convertion pointeur vers tableau
    Par gdpasmini dans le forum C++
    Réponses: 2
    Dernier message: 30/03/2006, 00h34
  5. Pointeur et TAbleau
    Par melmouj dans le forum C
    Réponses: 20
    Dernier message: 25/09/2005, 16h13

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