Votre question

[C] Allocation dyn. déclaré une seule fois dans une boucle

Tags :
  • element
  • Programmation
Dernière réponse : dans Programmation
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:
initializer element is not constant


je vous met en gros la représentation de la structure de mon code:
  1. char *boucle();
  2. char *Buffer = (char *)malloc(1005); //c'est la que ça pose probleme
  3. int nombre;
  4.  
  5. int main(){
  6. int i=0;
  7. nombre = 0;
  8.  
  9. do{
  10. boucle();
  11. }while( i==0);
  12. }
  13.  
  14. char *boucle(){
  15. char stringTmp[2] = "";
  16. nombre++; //incrémentation (1 tour en +):
  17. scnaf("%s", stringTmp);
  18.  
  19. if (nombre == 1) strcpy(Buffer, stringTmp);
  20.  
  21. else if (nombre < 2 && nombre > 10) strcat(Buffer, stringTmp);
  22.  
  23. else if (nombre == 10){
  24. strcat(Buffer, stringTmp);
  25. return Buffer;
  26. }
  27. }


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

a b L Programmation
6 Juin 2008 20:40:36

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.
  1. char * Buffer = NULL;
, et dans le main, ou une boucle ou une fonction, tu peux l'initialiser par un malloc.
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:
  1. if( Buffer ) free( Buffer );

Et penser à désallouer à la fin.
6 Juin 2008 22:48:34

oui, c'est ça le probleme je veux une seule variable alloué dynamiquement mais comment on peut faire, si je la met dans la boucle, alors une va etre crée a chaque passage, mais je ne veux une seule variable
6 Juin 2008 23:40:49

ptitcois a dit :
mais comment on peut faire


En lisant le monsieur au-dessus ;) 
6 Juin 2008 23:57:16

ptitcois a dit :
une seule variable alloué dynamiquement

une seule variable alloué sans condition et une seule fois, ca revient à créer un variable statique :o 
  1. #define NBCAR 10005
  2. char Buffer[NBCAR];


fscanf prend un pointeur sur FILE comme premier paramètre
7 Juin 2008 12:09:19

@coca 25: merci !
fscanf prend un pointeur sur FILE comme premier paramètre

Je voulais mettre "scanf". mais j'ai rajouté un f.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS