(Debutant!) probleme d'allocation c99

probleme d'allocation c99 (Debutant!) - C - Programmation

Marsh Posté le 23-11-2005 à 03:04:11    

bonjour,
je dois alloué un tableau a 2 dimension, voila comment jai proceder:
 
int n,m;
printf("entrer la dimension du tableau:\n" );
scanf("%d",&n);
int **tab;
tab=malloc(n * sizeof * tab);
for (int i=0;i<n;i++)
{
      tab[i]=malloc(m * sizeof * (tab[i]));
}

 
Et mon compilateur (terminal sous mandralinux 10.1) me dit que dans la fonction 'calcul' il y a une erreur:
 
'for' loop initial declaration used outside c99 mode
 
Merci d'avance pour votre aide,
a bientot.

Reply

Marsh Posté le 23-11-2005 à 03:04:11   

Reply

Marsh Posté le 23-11-2005 à 06:15:30    

Si tu fais des trucs C99 (la déclaration de i à l'intérieur du for en l'occurence) et que tu utilises gcc comme ça semble être le cas, il faut compiler avec -std=c99.
 
Edit : ça n'a rien à voir avec ton problème, mais dans ton morceau de code tu n'initialises par m.


Message édité par matafan le 23-11-2005 à 06:18:34
Reply

Marsh Posté le 23-11-2005 à 18:36:00    

merci,
et justement maintenant j'ai un probleme pour intialiser m!
de l'aide svp

Reply

Marsh Posté le 23-11-2005 à 19:45:05    

mador a écrit :

merci,
et justement maintenant j'ai un probleme pour intialiser m!
de l'aide svp


On est censés deviner quel est le problème ? Poste le code avec les balises 'fixed' ou 'cpp'.
 
J'ai quand même idée que tu dois faire une saisie, alors autant le faire bien tout de suite.
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers


Message édité par Emmanuel Delahaye le 23-11-2005 à 19:46:44

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-11-2005 à 01:27:22    

En fait c'est bon j'ai compris mon probleme, desolé j'etais dans mon délire!
Mais un nouveau se pose:
Mon programme rempli un tableau dans le desordre :
 

YhFS9QwxVw/jo[


 
Et je voudrais pouvoir l'afficher en temps reel, c'est a dire au fur et a mesure qu'il se rempli.
Merci de me donner des conseil.

Reply

Marsh Posté le 24-11-2005 à 01:29:22    

mador a écrit :

En fait c'est bon j'ai compris mon probleme, desolé j'etais dans mon délire!
Mais un nouveau se pose:
Mon programme rempli un tableau dans le desordre :
 

Code :
  1. YhFS9QwxVw/jo[


 
Et je voudrais pouvoir l'afficher en temps reel, c'est a dire au fur et a mesure qu'il se rempli.
Merci de me donner des conseil.


Reply

Marsh Posté le 24-11-2005 à 01:35:27    

tu veut afficher en temps réel le tableau au fur et a mesure que le programme le remplit ? dans ce cas je crois que tu va voir un problème de lenteur, du coté utilisateur ...


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 24-11-2005 à 05:31:32    

Faudra être plus précis si tu veux de l'aide. Tu as un tableau de pointeurs vers des tableaux d'int... Dans tous ça c'est quoi ce "YhFS9QwxVw/jo[" que tu veux afficher ?

Reply

Marsh Posté le 29-11-2005 à 16:45:47    

mador a écrit :

voila comment jai proceder:  
 

int n,m;  
printf("entrer la dimension du tableau:\n" );  
scanf("%d",&n);  
int **tab;  
tab=malloc(n * sizeof * tab);  
for (int i=0;i<n;i++)  
{  
      tab[i]=malloc(m * sizeof * (tab[i]));  
}

 
 
Mais un nouveau se pose:  
Mon programme rempli un tableau dans le desordre :  

YhFS9QwxVw/jo[




 
Tu fais erreur, "malloc" ne remplit pas une zone, il l'alloue. Schématiquement, tu as une grosse zone mémoire de 512Mo évidemment remplie de tout ce que l'ordinateur y a mis avec les différents programmes qui se sont exécutés depuis son démarrage.
Puis, tu demandes à "malloc" de te réserver une zone. Ben "malloc" pose un verrou à un certain endroit de la mémoire et dit "à partir de là et de maintenant, les n octets suivants sont à moi". Dans cette procédure, il n'y a pas de remplissage.
Maintenant, si tu affiches les "n" octets que malloc t'a réservé, ben tu n'affiches que leur contenu résiduel...

Reply

Marsh Posté le 29-11-2005 à 19:16:21    

Faudrait pas oublier non plus que malloc peut échouer, donc il faudrait tester les retours.
Il faudra penser aussi à désallouer la mémoire avec des free bien placés.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed