Bonjour,
J'ai un petit problème avec l'allocation et la libération de cette structure:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 typedef struct AudioMegaConvertPlugin { char filtreOpen[size...]; char filtreSave[size...]; /* .... */ } AudioMegaConvertPlugin, * lpAudioMegaConvertPlugin;
Je veux allouer autant de structures que j'en ai besoin, donc à chaque boucle, j'en alloue une nouvelle, voila la code:
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:
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
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 */
quand je faisais le "++amCplugin;"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.
Merci
Partager