Pointeur échangé avec une api C
Bonjour à tous,
J'écris un programme C++ qui accède à des données d'un logiciel propriétaire via une api C.
J'utilise des fonctions de l'api de la forme suivante :
Code:
int GetData(blabla, int type_data, api_struct *return_data);
Je choisi la donnée que je souhaite récupérer avec la variable type_data.
Je fourni un pointeur de type api_struct qui recevra dans l'union data la donnée souhaitée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
typedef struct _api_struct
{
int type_data; /* Key indicating type of information */
union
{
int data1;
char *data2;
time_t data3;
int data4;
char *data5;
} data;
} api_struct; |
La fonction de l'api renseigne le pointeur fourni.
L'accès se fait donc de la façon suivante :
Code:
1 2 3 4
|
api_struct *list_data;
GetData(blabla, type_data2, list_data);
ma_fonction_locale(list_data->data.data2); |
A la compilation j'ai le warning suivant :
133: warning: 'list_data' is used uninitialized in this function
Pourtant la documentation de l'api dit que la mémoire pointée par le pointeur retourné par la fonction est gérée par l'api.
A l'exécution j'ai l'erreur :
Code:
Process returned -1073741819 (0xC0000005) execution time : 6.750 s
Alors j'ai effectué la modification suivante :
Code:
1 2 3
| api_struct list_data[1000];
GetData(blabla, type_data2, list_data);
ma_fonction_locale(list_data->data.data2); |
et même
Code:
1 2 3
| api_struct list_data[0];
GetData(blabla, type_data2, list_data);
ma_fonction_locale(list_data->data.data2); |
Et ça marche. Mais si j'appelle la fonction plus d'une demi-douzaine de fois j'ai l'erreur :
Code:
"La mémoire ne peut être read".
Qu'est-ce que j'ai loupé ? :koi: