tableau en parametre

tableau en parametre - C++ - Programmation

Marsh Posté le 02-03-2006 à 16:58:52    

Help please
 
J'ai un tableau qui perd sa taille apres passage en paramètre.
 
fonction1 (int tb[]);
fonction2 (int tb[]);
 
main{
 
int tb[50];
   
   while (true){
 
        fonction1(tb)
 
   } //while
 
}  // main
 
fonction1(int tb[]){
      fonction2(tb)
}
 
fonction2(int tb[]){
    //instructions...
   // ajouter 5 elements a tb;
}
 
 
apres traitement dans les fonctionc 1 et 2 et au retour dans le main mon tableau tb[] garde juste la taille des 5 elements insérés et perd la taille [50].
Que faire afin que tb garde toujours sa taille tout en suivant les etapes de mon while?
 
Merci,
 
hm10
 

Reply

Marsh Posté le 02-03-2006 à 16:58:52   

Reply

Marsh Posté le 02-03-2006 à 17:14:13    

Q1: Comment fais-tu pour voir la taille du tableau ?
 
Q2: Comment les 5 élements sont-ils ajouté dans fonction2 ?
 
Petite remarques pour infos :
 
1. Dans fonction1 et fonction2, sizeof(tb) renverra la taille du pointeur sur le tableau, et non pas la taille du tableau.
 
2. int tb[] est équivalent à int *tb
 

Reply

Marsh Posté le 02-03-2006 à 17:19:40    

Merci pour la reponse. Mais le probleme c'est que a l'interieur de fonction2 je vois la taille [50] du tableau, mais un fois sorti  de cette fonction je ne peux pas ajouter d'autres éléments car la taille du tableau est réduite au nombre d'elements insérés

Reply

Marsh Posté le 02-03-2006 à 17:31:47    

Comment fais-tu pour voir cette taille ?
En utilisant sizeof ? strlen ? en faisant tourner l'application avec un debuggeur ?
 
D'après le code qui est montré, un tableau de 50 entiers est réservé sur la pile dans la fonction main(). Cet espace réservé ne sera jamais réduit tant que le programme ne sera pas sorti de la fonction main() et de ses sous-fonctions (sauf à bidouiller esp ou ebp avec de l'assembleur).
Donc, soit la taille que tu vois n'est pas la bonne, car la méthode pour voir cette taille est imparfaite, soit d'autres données viennent se mettre à partir du sixième élément du tableau de manière inopinée (fuite/débordement mémoire), faisant croire que le tableau s'est rétréci à 5 élements.

Reply

Marsh Posté le 02-03-2006 à 18:00:50    

Normalement je le vois avec sizeof comme tu l'as dit et je vois qu'il garde la taille, suaf que je ne voyais pas tous mes éléments. Une autre question : Comment faire pour afficher des éléments l'un à côté de l'autre. Ex : Je voulais faire ceci :
 for (int i = 0; i < 50; i++){
    cout << tampon[i] << endl;
 }
Quand j'enleve le << endl, C++ ne m'affiche pas les éléments du tableau.
 
Merci bien pour votre aide

Reply

Marsh Posté le 02-03-2006 à 18:03:18    

hm10 a écrit :

Normalement je le vois avec sizeof comme tu l'as dit et je vois qu'il garde la taille, suaf que je ne voyais pas tous mes éléments. Une autre question : Comment faire pour afficher des éléments l'un à côté de l'autre. Ex : Je voulais faire ceci :
 for (int i = 0; i < 50; i++){
    cout << tampon[i] << endl;
 }
Quand j'enleve le << endl, C++ ne m'affiche pas les éléments du tableau.


 
mets un seul endl, à la fin de l'affichage

Code :
  1. for (int i = 0; i < 50; i++)
  2.   cout << tampon[i] << " ";
  3. cout << endl;

Reply

Marsh Posté le 02-03-2006 à 19:16:44    

un tableau a une taille statique, utilises std::vector si tu veux redimensionner

Reply

Marsh Posté le 02-03-2006 à 19:43:55    

hm10 a écrit :


 for (int i = 0; i < 50; i++){
    cout << tampon[i] << endl;
 }
Quand j'enleve le << endl, C++ ne m'affiche pas les éléments du tableau.


 
ton programme se termine anormalement, et le destructeur de std::cout n'est pas appelé, et ne flush donc pas.

Reply

Marsh Posté le 02-03-2006 à 19:54:06    

c'est bon les amis. Merci, tout est correct

Reply

Sujets relatifs:

Leave a Replay

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