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 :
Je choisi la donnée que je souhaite récupérer avec la variable type_data.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int GetData(blabla, int type_data, api_struct *return_data);
Je fourni un pointeur de type api_struct qui recevra dans l'union data la donnée souhaitée :
La fonction de l'api renseigne le pointeur fourni.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
L'accès se fait donc de la façon suivante :
A la compilation j'ai le warning suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 api_struct *list_data; GetData(blabla, type_data2, list_data); ma_fonction_locale(list_data->data.data2);
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 :
Alors j'ai effectué la modification suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Process returned -1073741819 (0xC0000005) execution time : 6.750 s
et même
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 api_struct list_data[1000]; 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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 api_struct list_data[0]; GetData(blabla, type_data2, list_data); ma_fonction_locale(list_data->data.data2);
Qu'est-ce que j'ai loupé ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part "La mémoire ne peut être read".
Partager