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 :

Déréferencement d'un pointeur de type incomplet


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 25
    Points
    25
    Par défaut Déréferencement d'un pointeur de type incomplet
    Bonjour, j'ai des erreurs de déréférencement de pointeur de type incomplet.

    J'ai un fichier video_stage_decoder.h où je déclare la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef struct _video_decoder_config_t
    {
      vp_api_picture_t *src_picture; // vient de la structure vp_api_picture
      vp_api_picture_t *dst_picture; // vient de la structure vp_api_picture
      uint32_t num_frames;
      uint32_t num_picture_decoded;
      uint32_t rowstride;
      uint32_t bpp;
      bool_t vlibMustChangeFormat;
      vlib_stage_decoding_config_t *vlibConf;
      vp_api_io_data_t *vlibOut;
      mp4h264_config_t *mp4h264Conf;
      vp_api_io_data_t *mp4h264Out;
    } video_decoder_config_t;
    et le fichier vlib.h définie la structure suivante :
    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
    typedef struct _vp_api_picture_
    {
      enum PixelFormat format;    // camif -> encoder : PIX_FMT_YUV420P
     
      uint32_t         width;     // camif -> encoder
      uint32_t         height;    // camif -> encoder
      uint32_t         framerate; // camif -> encoder
     
      uint8_t         *y_buf;     // camif -> encoder
      uint8_t         *cb_buf;    // camif -> encoder
      uint8_t         *cr_buf;    // camif -> encoder
     
      uint32_t         y_pad;     // 2* camif_config.y_pad
      uint32_t         c_pad;     // 2* camif_config.c_pad
     
      uint32_t         y_line_size;
      uint32_t         cb_line_size;
      uint32_t         cr_line_size;
     
      uint32_t         vision_complete;
      uint32_t         complete;
      int32_t          blockline;
    }
    vp_api_picture_t;
    J'utilise ces structures dans le fichier video_stage_latency_estimation.c (évidement j'ai include les deux headers précédents ...) aux lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct video_decoder_config_t * vec;
    if ( cfg->w != vec->dst_picture->width || cfg->h != vec->dst_picture->height)
            {
              cfg->w = vec->dst_picture->width;
              cfg->h = vec->dst_picture->height;
    ...
     switch (vec->dst_picture->format)
                {
    ...
    }
    Voilà, quelqu'un pour m'aider ?

    merci d'avance !

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Bonjour,
    Pour résoudre le problème, il faudrait que tu nous dises quel est le message d'erreur exact.

    Un type incomplet est en général du déréférencement d'un pointeur sur un type seulement déclaré, mais non défini.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Bonjour et merci de répondre !

    L'erreur est répétée 7 fois sur plusieurs lignes, voici une de ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Examples/Linux/Examples/Soft/Lib/ardrone_tool/Video/video_stage_latency_estimation.c|169|erreur: déréférencement d'un pointeur de type incomplet

  4. #4
    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
    Y a t-il d'autres erreurs ou warnings précédant ces messages d'erreurs ?
    Comment et où est defini cfg ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Non aucun warning et ce sont les premières erreurs qui tombent ...

    Par contre je remarque que l'autocompletion de Code::Blocks me trouve les champs de la structure appelée par vec->, mais il ne trouve pas les champs associés à dst_picture-> ...
    Donc ça doit venir de la deuxième structure ...

    En fait le .c n'inclut pas le .h définissant la seconde structure, mais le .h de la première structure (étant donné que cette première structure fait appel à la seconde ...). Je dois faire des include des .h partout ?

    Et cfg est définie de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vp_stages_latency_estimation_config_t *cfg
    où vp_stages_latency_estimation_config_t est aussi une structure.

  6. #6
    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
    Donc video_stage_decoder.h est inclus dans le .c
    video_stage_decoder.h doit inclure vlib.h, ou à defaut le .c doit aussi inclure vlib.h, sinon le .c ne peut connaitre les champs de vp_api_picture_t.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    C'est justement ça le problème, c'est ce que j'ai fais ... là mon .c inclus video_stage_decoder.h et video_stage_decoder.h inclus vlib.h.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/11/2012, 16h16
  2. déréférencement d'un pointeur de type incomplet
    Par ikuzar dans le forum Débuter
    Réponses: 1
    Dernier message: 07/09/2009, 18h37
  3. déréférencement d'un pointeur de type incomplet
    Par pauligno dans le forum Débuter
    Réponses: 8
    Dernier message: 10/12/2007, 10h50
  4. Renvoyer un pointeur de type structure
    Par bluecurve dans le forum C
    Réponses: 2
    Dernier message: 18/05/2007, 20h29
  5. [LG]Liste de pointeurs de type pointer
    Par tom_snop dans le forum Langage
    Réponses: 4
    Dernier message: 29/03/2005, 23h40

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