Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Passer un tableau dynamique en paramètre [ Archives / Au secours ] (freepouy18)

vendredi 5 août 2005 à 12:39:30 | Passer un tableau dynamique en paramètre

freepouy18

Salut tlm! J'aimerais savoir si je peux ou non passer en paramètre un tableau dynamique  dont je n'ai pas encore alloué de mémoire(allocation à l'intérieur de la fonction). En gros, voila ce que je veux faire :

//variables globales

CString *tab;
CString *temp;
CString machaine = "test";
int nombre_element = 0;

void SetDynaArray(int &nb_element, CString tab[], CString temp[], CString elt)
{
 if (nb_element)
 {
  tab= new CString[nb_element+1];
  for (int i=0; i<nb_element; i++)
   tab[i] = temp[i];
  temp = tab;     
 } 
 else  temp = new CString;
 {     
  temp[nb_element++] = elt;
 } 
}

Appel de la méthode :
    SetDynaArray(nombre_element, tab, temp, machaine);


Y a-t-il des erreurs et surtout comment puis-je régler mon probleme de tableau dynamique?

Merci


vendredi 5 août 2005 à 13:42:09 | Re : Passer un tableau dynamique en paramètre

Galmiza

Salut,

BYTE *pByte;
AllocateMemoryForpByte(&pByte);
delete [] pByte;


avec:
void AllocateMemoryForpByte(BYTE **ppData)
{
 *ppData = new BYTE[256];
}

vendredi 5 août 2005 à 13:45:33 | Re : Passer un tableau dynamique en paramètre

AlexMAN

Membre Club
Je ne vois aucun probleme a faire ca. Par contre, si les variables que tu passes en param sont 'globales', il n'y a aucun interet a faire ceci, puis ce que tu pourras acceder a celles-ci a l'interieur de la fonction que tu appelles. C'est ca ton probleme d'allocation dynamique ?

+2(p - n)

vendredi 5 août 2005 à 13:48:17 | Re : Passer un tableau dynamique en paramètre

bathof

Salut,

tu peux passer sans problèmes un tableau dynamique en paramètre, mais il y a
des choses à savoir.

Quand tu crées un tableau dynamique tu crées en fait une zone mémoire pour ton tableau dans la mémoire vive qui est pointée par un pointeur du même type, donc CString* tableau, n'est pas un tableau mais un pointeur sur l'adresse de la première case mémoire de ta zone alloué.

Alors pour passer un tableau dynamique en paramètre tu passes un pointeur sur
la zone mémoire concernée.

Quand tu fais  : tableau = new CString [10];  tu crées la zone mémoire pour ton
tableau de 10 de type CString et "new" vas te retourné l'adresse au pointeur tableau.

Attention n'oublie pas de supprimer ta zone mémoire quand tu ne l'utilise plus, car
si tu ne détruits pas les tableaux systématiquement la mémoire vive vas saturée.
Ex : delete [] tableau;

Ex programme :

void creat(char* tab)
{
 tab = new char[11];
}

void main()
{
 char* tableau = NULL;

creat(tableau);

delete [] tableau;
}

++ et bonne chance.

vendredi 5 août 2005 à 13:59:28 | Re : Passer un tableau dynamique en paramètre

buno

Moi, je passerais les pointeurs, comme ceci:

void SetDynaArray(int &nb_element, CString *tab, CString *temp, CString elt)

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

vendredi 5 août 2005 à 14:08:30 | Re : Passer un tableau dynamique en paramètre

xterminhate

Membre Club
Bathof, si ton explication est juste, tu es malheureusement l'auteur d'une belle fuite de mémoire avec ton code donné comme exemple.

Le prototype correct de ta fonction est "void( char * & tab )". Tu vois pourquoi ? Je sais qu'on ne peut pas modifier son post et c'est bien dommage.

Ca rejoint un topic déjà existant et tres récent. Le passage par référence rend l'écriture plus sympathique. La solution proposée par Galmiza est ok si on tient à faire un passage par pointeur (du pointeur [sic!]).

vendredi 5 août 2005 à 14:09:34 | Re : Passer un tableau dynamique en paramètre

xterminhate

Membre Club
Bruno, je crains que tu sois confronté à des fuites....

vendredi 5 août 2005 à 15:03:18 | Re : Passer un tableau dynamique en paramètre

bathof

Je crois que j'ai fais just car :

char* tab;

tab = &tab;

donc j'init le poiteur tab de la fonction par l'adresse de tableau de la
fonction.

char* tab = tableau;

est egale a

char* tab = &tableau;

Mais je retiens, merci et a +


vendredi 5 août 2005 à 15:12:55 | Re : Passer un tableau dynamique en paramètre

bathof

A oui désolé, tu as raison, j'ai fais une gourde. Merci et a plus.

Correction :

void creat(char** tab){
 *tab = new char[10];
}

int main()
{
 char* tableau;

 creat(&tableau);
}

vendredi 5 août 2005 à 15:14:48 | Re : Passer un tableau dynamique en paramètre

xterminhate

Membre Club
J'ai rien compris. Pour t'en convraince, tu remarqueras que dans ton code, apres l'appel de creat(), tableau est tjs égale à 0. Il n'est pas modifié dans le contexte appelant....


1 2

Cette discussion est classé dans : tableau, temp, element, tab, cstring


Répondre à ce message

Sujets en rapport avec ce message

DEPLACER TOUS LES ELEMENT DUN TABLEAU A 2 DIMENSIONS [ par retaks666 ] j'aimerais savoir si il existe un fonction qui permet de deplacer tous les element d'un tableau d'une "ligne".exemple char a[10][10];coutfonction(a);a ajout d'un caractere dans un tableau [ par kalf2000 ] salut,g un petit blèm:g un tableau de caractère où g mis un chiffre, aprés avoir utilisé la fct itoa. et il fo que j'insere un autre chiffre avant cel Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le Blem Somme ELmt d'un Tableau Bidimensionnel [ par Orezza ] Slt c encore moi, le boulet de l'info...c tjrs le meme prog mais cette fois ci j'aimerais afficher la somme des elmts de mon tableaux.#include #includ tableau char [ par dingue007 ] Voila je dois faire un prog en C++ : un tableau avec les mois de lannée et quand je tape un chiffre il me sort le mois ! mais je narrive pas a faire l Occurence Tableau [ par BimboKlak ] Comment faire pour trouver l'occurence d'un nombre dans un tableau à 1 dimension en C?ex:tab[4] = {3, 2, 3, 2}for (i=0;i cout Et ensuite trouver comb Tableau suite... [ par Niníel ] Alors voila ma 2ème question de la journée :-PJ'ai un tableau de caractères 64 position: char Tab[64], un compteur: int inCompter et un tableau de 1 p tableau unidimensionnel .... [ par slowlover ] j'ai fais un tableau unidimensionnel dont voici l'algorithme:#includeint main(){//declarationsfloat tab[10];int i;for(i=0;i{printf("entrez la valeur % Tableau d'int à partir d'une CString [ par julien20vt ] Bonjour,J'utilise les MFC, et j'aimerais pouvoir remplir un tableau d'int à partir d'une variable de type CString formatée de la manière suivante :CSt tableau [ par anek971 ] lut tous le monde;Je suis nouvo ds la programmation dc ma question paraitra certainement bete, mais comment fait on qd on as declaré un tableau et k'o


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.