[C] Allocation dyn. déclaré une seule fois dans une boucle
Tags :
- element
- Programmation
Dernière réponse : dans Programmation
ptitcois
6 Juin 2008 17:18:46
(Re)Bonjour, j'ai un probleme et je ne voi pas du tout comment le résoudre.
Dans une boucle je veux créer un Buffer, mais le probleme c'est que si je le déclare dans la boucle, a chaque tour de boucle il y en aura un de créé. Mais quand je le déclare en Variable globale, il me dit:
je vous met en gros la représentation de la structure de mon code:
Voila, je ne vois donc pas d'autres solutions, si vous en connaissez, n'hésitez pas...
Merci
Dans une boucle je veux créer un Buffer, mais le probleme c'est que si je le déclare dans la boucle, a chaque tour de boucle il y en aura un de créé. Mais quand je le déclare en Variable globale, il me dit:
initializer element is not constant
je vous met en gros la représentation de la structure de mon code:
char *boucle();
char *Buffer = (char *)malloc(1005); //c'est la que ça pose probleme
int nombre;
int main(){
int i=0;
nombre = 0;
do{
boucle();
}while( i==0);
}
char *boucle(){
char stringTmp[2] = "";
nombre++; //incrémentation (1 tour en +):
scnaf("%s", stringTmp);
if (nombre == 1) strcpy(Buffer, stringTmp);
else if (nombre < 2 && nombre > 10) strcat(Buffer, stringTmp);
else if (nombre == 10){
strcat(Buffer, stringTmp);
return Buffer;
}
}
Voila, je ne vois donc pas d'autres solutions, si vous en connaissez, n'hésitez pas...
Merci
Autres pages sur : allocation dyn declare seule fois boucle
Je ne comprends pas ce que tu veux faire.
En C, une variable globale ne peut pas être initialisée de façon dynamique. Le "malloc" doit ête exécuté puisque c'est une fonction. L'exécution d'un programme se fait linéairement, quand veux-tu exécuter le malloc si le point d'entrée est le main, et que ça déroule jusqu'à la fin.
donc si tu veux utiliser une variable globale pour un tableau dynamique, tu commences par un pointeur NULL.
Attention, lorsque tu fais un malloc, tu alloues de la mémoire à l'adresse indiqué par le pointeur. Si tu refait un malloc par dessus, tu as une nouvelle adresse mémoire assignée sur le pointeur, mais l'ancienne mémoire allouée reste toujours alouée.
il faut donc toujours penser à désallouer la mémoire.
Si tu alloues un nouveau buffer sur un pointeur qui pointe sur un buffer déjà initialiser, il faut bien penser à désallouer la mémoire avant:
Et penser à désallouer à la fin.
En C, une variable globale ne peut pas être initialisée de façon dynamique. Le "malloc" doit ête exécuté puisque c'est une fonction. L'exécution d'un programme se fait linéairement, quand veux-tu exécuter le malloc si le point d'entrée est le main, et que ça déroule jusqu'à la fin.
donc si tu veux utiliser une variable globale pour un tableau dynamique, tu commences par un pointeur NULL.
, et dans le main, ou une boucle ou une fonction, tu peux l'initialiser par un malloc.
char * Buffer = NULL;
Attention, lorsque tu fais un malloc, tu alloues de la mémoire à l'adresse indiqué par le pointeur. Si tu refait un malloc par dessus, tu as une nouvelle adresse mémoire assignée sur le pointeur, mais l'ancienne mémoire allouée reste toujours alouée.
il faut donc toujours penser à désallouer la mémoire.
Si tu alloues un nouveau buffer sur un pointeur qui pointe sur un buffer déjà initialiser, il faut bien penser à désallouer la mémoire avant:
if( Buffer ) free( Buffer );
Et penser à désallouer à la fin.
ptitcois
6 Juin 2008 22:48:34
maxcailla
6 Juin 2008 23:40:49
coca25
6 Juin 2008 23:57:16
ptitcois
7 Juin 2008 12:09:19