Déréferencement d'un pointeur de type incomplet
ABouras
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
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 :
et le fichier vlib.h définie la structure suivante :
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 :
Voilà, quelqu'un pour m'aider ?
merci d'avance !
J'ai un fichier video_stage_decoder.h où je déclare la structure suivante :
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 :
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 :
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 !
A voir également:
- Déréferencement d'un pointeur de type incomplet
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Clear type - Guide
- Type de ram - Guide
- Comment changer le type de fichier - Guide
2 réponses
Salut ABouras,
video_decoder_config_t n'est pas une structure, c'est un type définit avec typedef.
Lorsque tu déclares vec, tu devrais donc écrire :
Cependant, je ne comprend pas la suite de ton code, car je ne vois nulle part que tu aies alloué la mémoire nécessaire à ce qui est pointé par dst_picture (qui est un pointeur sur vp_api_picture_t, ni, a fortiori, que tu aies initialisé les valeurs de width et height qui sont contenues dans la structure de type dst_picture et dont tu te sers comme si elles l'étaient.
Dal
video_decoder_config_t n'est pas une structure, c'est un type définit avec typedef.
Lorsque tu déclares vec, tu devrais donc écrire :
video_decoder_config_t * vec;
Cependant, je ne comprend pas la suite de ton code, car je ne vois nulle part que tu aies alloué la mémoire nécessaire à ce qui est pointé par dst_picture (qui est un pointeur sur vp_api_picture_t, ni, a fortiori, que tu aies initialisé les valeurs de width et height qui sont contenues dans la structure de type dst_picture et dont tu te sers comme si elles l'étaient.
Dal
Si j'ai définit ensuite vec de la manière suivante :
vec = (struct video_decoder_config_t *)cfg->last_decoded_frame_info;
Je ne sais pas ce qu'est cfg (ce n'est pas définit dans ce que tu postes). Mais en admettant que ce soit un espace alloué vers lequel peut pointer un pointeur de type video_decoder_config_t, tu ajoutes de nouveau un "struct" qui n'a rien à faire là.
soit tu fais :
et dans ce cas tu utilises l'alias de type que tu as définit avec typedef.
soit du fais :
et dans ce cas, tu utilises l'étiquette de struct qui est préfixée d'un underscore (et ton typedef ne sert à rien).
Dal
PS : et ton pointeur dst_picture, il correspond à de la mémoire allouée ?
soit tu fais :
video_decoder_config_t * vec; vec = (video_decoder_config_t *)cfg->last_decoded_frame_info;
et dans ce cas tu utilises l'alias de type que tu as définit avec typedef.
soit du fais :
struct _video_decoder_config_t * vec; vec = (struct _video_decoder_config_t *)cfg->last_decoded_frame_info;
et dans ce cas, tu utilises l'étiquette de struct qui est préfixée d'un underscore (et ton typedef ne sert à rien).
Dal
PS : et ton pointeur dst_picture, il correspond à de la mémoire allouée ?
Dal