Double pointeur sur structure, libération et allocation de mémoire
Bonjour,
J'ai un petit problème avec l'allocation et la libération de cette structure:
Code:
1 2 3 4 5
| typedef struct AudioMegaConvertPlugin {
char filtreOpen[size...];
char filtreSave[size...];
/* .... */
} AudioMegaConvertPlugin, * lpAudioMegaConvertPlugin; |
Enfait, le problème est pendant l'allocation et après pour la libération, je ne suis pas sûr que mon code soit juste.
Je veux allouer autant de structures que j'en ai besoin, donc à chaque boucle, j'en alloue une nouvelle, voila la code:
Code:
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
| AudioMegaConvertPlugin **amCplugin = {NULL};
/* ou (lpAudioMegaConvertPlugin *amCplugin) */
amCplugin = malloc(sizeof(AudioMegaConvertPlugin*));
/* ======== BOUCLE */
/* Quand je veux une nouvelle structure, je fais */
*amCplugin = malloc(sizeof(AudioMegaConvertPlugin));
/* Puis je veux par exemple remplir le membre 'filtreOpen' et le membre 'filtreSave' (ici par l'appel d'un plugin) */
dllStartV((*amCplugin)->filtreOpen, (*amCplugin)->filtreSave);
/* Maintenant, je veux une nouvelle structure sur le meme
pointeur donc, je fais: (C'EST LA QU'IL Y A UN PROBLEME) */
++amCplugin;
/* Et je recommence comme au dessus, malloc(), etc. */
/* ======== FIN BOUCLE */
/* ======== Puis arrive a la fin du programme, (2eme PROBLEME...)
je veux liberer ce fameux truc...
donc, je fais tant que (*amCplugin != NULL) free(amCplugin);
Mais je ne sais pas "où commence" "amCplugin" (emplacement memoire)
alors j'ai enregistre au debut du programme sa valeur par la variable
PluginAdress, comme cela: (PluginAdress = (int) amCplugin;) */
for(amCplugin = (int) PluginAdress ;
*amCplugin != NULL ; free(*amCplugin), ++amCplugin) ;
/* Mais mon compilo n'a pas l'air de trouver ca marrant, il me sort:
[Warning] assignment makes pointer from integer without a cast */ |
Si quelqu'un pourrait me dire comment faire une libération correcte et une allocation correcte car le "++amCplugin;" ne me semble pas correct, d'ailleur j'ai testé avec beaucoups de boucles et j'ai eu:
Citation:
Runtime Error!
Program : E:\[AudioMega]\scr\AudioMega.exe
This application has requested the Runtime to terminate it in an unsual way.
Please contact the application's support team for more information.
quand je faisais le "++amCplugin;"
Merci