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 qui n'est pas vu comme un pointeur par le compilateur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut Pointeur qui n'est pas vu comme un pointeur par le compilateur
    Bonjour,

    J'ai un probleme bizarre en C avec un pointeur. Voici mon code:

    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
    double* ConstruitParametres (int Dimension, int NbPoints, VecteurPtr Q[]) //Q contient NbPoints vecteurs de dimension Dimension
    {
    	int i;
    	double t[NbPoints];
    	double* p=t;
    	t[0]=0;
    	for (i=0; i<NbPoints-1; i++)
    	{
    		t[i+1]=t[i]+DistancePoints(Q[i+1],Q[i]);
    	}
    	return p;
    }
    
    CourbeBezierPtr ConstruitCourbe (int Dimension, int NbPoints, int Degre, VecteurPtr Points[])
    {
    	if (NbPoints==Degre+1)
    	{
    		CourbeBezierPtr C = CourbeBezierConstructeur(Dimension, Degre);
    		MatricePtr M = MatriceConstructeur(Dimension,NbPoints);
    		int i,j,k;
    		for (i=0; i<Dimension; i++)
    		{
    			for (j=0; j<NbPoints; j++)
    			{
    				double* A = ConstruitParametres(Dimension, NbPoints, Points);
    				M[i][j] = EvalueBernstein(C->Ordre, NbPoints, A[i]);
    			}
    		}
    //Ainsi de suite...
    Le compilateur s'acharne a me dire ca sur le A[ i ]:
    subscripted value is neither array nor pointer
    Pourtant, tout dans la methode precedente prouve le contraire! Je precise que le dernier parametre de EvalueBernstein doit etre un double.

    Merci de votre aide!

  2. #2
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Bonsoir,

    Il y a quelque chose d'étrange dans votre programme:
    -la fonction ConstruitParametres prend un argument "Dimension" qu'elle n'utilise pas(peut-être devrait il être utilisé dans la fonction "DistancePoints"?)
    -Votre tableau pointé par p est de dimension NbPoints donc A est de dimension NbPoints, or on évalue A[i] avec i allant jusqu'à Dimension

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 155
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    En fait, je pense pas qu'il s'acharne sur A[I] mais plus sur C->Ordre
    Sachant que c'est est un CourbeBezierPtr qui est surement un typedef ...
    Mais si c'est une classe / structure ... alors le compilateur a raison (il a toujours raison) et vous ne pouvez pas faire '->' dessus (ce qui explique le message d'erreur).

    Sinon, dans la globalité, votre code est assez bizarre, surtout dans la fonction ConstruitParametres et votre histoire de 'p' et 't'

    Sinon, si vous ne trouvez pas l'erreur, j'aimerai bien avoir connaissance de la déclaration de:
    CourbeBezierPtr
    et la définition de EvalueBernstein

    Merci
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    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
    A moins qu'il ne râle sur le M[i] ou le M[i][j]. Mais comme on ne connait pas la définition d'un MatricePtr....

    De toute façon, la fonction ConstruitParametres() renvoie l'adresse d'une variable locale (t[]) -> plantage assuré.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Pour rpondre vos questions:

    - J'ai tres souvent fait une -> avec un CourbeBezierPtr et je n'ai jamais eu de problemes!

    Voici les definitions de CoubeBezierPtr et de MatricePtr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct courbe_bezier
    {
      int Degre;
      int Dimension;	
      int Ordre;
      VecteurPtr Poles[3];
    } CourbeBezier, *CourbeBezierPtr;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct Mat 
    {
      int C;
      int L;
      int Taille;
      double * Coef;
      double ** Coef2d;
    } Matrice, *MatricePtr;
    Et mon code d'origine existait sans le p:
    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
    double* ConstruitParametres (int Dimension, int NbPoints, VecteurPtr Q[]) //Q contient NbPoints vecteurs de dimension Dimension
    {
    	int i;
    	double* t;
    	t[0]=0;
    	for (i=0; i<NbPoints-1; i++)
    	{
    		t[i+1]=t[i]+DistancePoints(Q[i+1],Q[i]);
    	}
    	return t;
    }
     
    CourbeBezierPtr ConstruitCourbe (int Dimension, int NbPoints, int Degre, VecteurPtr Points[])
    {
    	if (NbPoints==Degre+1)
    	{
    		CourbeBezierPtr C = CourbeBezierConstructeur(Dimension, Degre);
    		MatricePtr M = MatriceConstructeur(NbPoints,Dimension);
    		int i,j,k;
    		for (i=0; i<NbPoints; i++)
    		{
    			for (j=0; j<Dimension; j++)
    			{
    				double* A = ConstruitParametres(Dimension, NbPoints, Points);
    				M->Coef2d[i][j] = EvalueBernstein(C->Ordre, NbPoints, A[i]);
    			}
    		}
    //...
    ...c'est bon j'ai trouve! Il fallait ecrire M->Coef2d[i][j] et non M[i][j] (confusion avec Java!).
    Autre chose: Il fallait effectivement inverser NbPoints et Dimension dans deux boucles for de i et j. Merci a tous!

    Edit: Tu dis que le compilateur a toujours raison, mais il ne m'a pourtant pas donne la vraie cause de l'erreur...

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 155
    Billets dans le blog
    150
    Par défaut
    Citation Envoyé par User Name Voir le message
    ...c'est bon j'ai trouve! Il fallait ecrire M->Coef2d[i][j] et non M[i][j] (confusion avec Java!).
    Autre chose: Il fallait effectivement inverser NbPoints et Dimension dans deux boucles for de i et j. Merci a tous!

    Edit: Tu dis que le compilateur a toujours raison, mais il ne m'a pourtant pas donne la vraie cause de l'erreur...
    Ah oui ? O_o étonnant O_o
    subscripted value is neither array nor pointer
    Car cela veut exactement dire votre erreur (comme quoi l'utilisation de la variable est complètement foireuse)
    Après, il se peut que le compilateur donne un tas d'erreurs, et là en regardant la première, nous savons d'où cela vient (mais ça, c'est à cause que c'est un processus d'analyse syntaxique).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. pointeur sur un childframe qui n'est pas active
    Par moooona dans le forum MFC
    Réponses: 1
    Dernier message: 05/10/2010, 07h44
  2. Réponses: 1
    Dernier message: 20/08/2010, 17h40
  3. Réponses: 8
    Dernier message: 04/08/2004, 14h17
  4. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 13h09
  5. [VB6] générer un recordset qui n'est pas lier à un bdd
    Par damyrid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/06/2003, 17h48

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