RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Serv: irc.irc-land.org
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 instanciation "vector" stl

Forum : LIBRAIRIE C++
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ LIBRAIRIE C++

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM LIBRAIRIE C++

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
Tonino
Nouveau membre
Inscrit : 16/02/2005
Messages : 3
Message
#52526
Posté le 16/02/05 à 20:17
Bonjour,

j'ai créé une classe qui contient un pointeur vers de la mémoire dynamique (celle-ci étant allouée dans le constructeur de ma classe).
J'ai remarqué que lorsque que je crée un vector stl de n éléments de ma classe, le programme ne passe qu'une fois dans le constructeur de ma classe (mais il y a bien n éléments dans mon vector), du coup ma mémoire dynamique n'est pas allouée correctement.
Quequ'un aurait une idée du problème?

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6571
Message
#52549
Posté le 16/02/05 à 23:03
Tu as essayé tes objets après les avoir créé ?
Tu peux montrer la partie de code qui "déconnerait" ?
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

Tonino
Nouveau membre
Inscrit : 16/02/2005
Messages : 3
Message
#52556
Posté le 16/02/05 à 23:46
Oui oui, pas de problème:


#include <vector> using namespace std; class class1 { public: class1(unsigned int arraySize) {arrayInt = (int*)calloc(arraySize, sizeof(int));} ~class1() {} protected: int* arrayInt; }; void main(void) { int class1Nb = 10; unsigned int arraySize = 50; vector<class1> *vecClass1; vecClass1 = new vector<class1>(class1Nb, arraySize); }


j'ai effectivement essayé mes objets après les avoir instanciés, la mémoire n'a été allouée pour aucun des objets...

Je pense que mon problème principal vient du fait que mon constructeur possède 1 argument... Alors y a-t'il possibilité de passer l'argument du constructeur de ma classe lors de l'instanciation du vector? Je crois que c'est le passage de l'agument de mon constructeur qui est foireux...
Bien sûr, je pourrais allouer ma mémoire en dehors du constructeur, mais alors ça me donnerais un code moins sûr (ben oui, je pourrais oublier d'appeler cette seconde méthode).

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Alp
Superviseur :
- Système d'ex.
- Méthodologie.
- C & C++
Modérateur :
- Bavardages
Chef de projet(s) :
- My SDL Lib

Avatar de Alp
Inscrit : 24/06/2004
Messages : 2547
Message
#52560
Posté le 17/02/05 à 00:05
Peut-être une boucle pour allouer de la place pour tous les éléments du vecteur...?
Alp
__________________________
Be C++
Mon Blog (C++, Intelligence Artificielle, Prolog)

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6571
Message
#52623
Posté le 17/02/05 à 11:33
Je ne veux pas dire de connerie n'ayant pas l'habitude des templates, mais ce que fait ton code c'est :
un vecteur de class1 qui ne possède qu'un élément class1 qui lui possède un tableau de ArraySize int.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

Alp
Superviseur :
- Système d'ex.
- Méthodologie.
- C & C++
Modérateur :
- Bavardages
Chef de projet(s) :
- My SDL Lib

Avatar de Alp
Inscrit : 24/06/2004
Messages : 2547
Message
#52634
Posté le 17/02/05 à 12:00
En gros il a un vector content des class1, qui pour l'instant a une taille de 10 : il pourra contenir 10 objets de type class1.
Et ce qu'il veut c'est instancier ces class1 qui se trouvent dedans avec une valeur par défaut, il me semble... Une simple boucle devrait suffir.


int class1Nb = 10; unsigned int arraySize = 50; vector<class1> *vecClass1; vecClass1 = new vector<class1>(class1Nb); for(int i=0;i<class1Nb;i++) { // instanciation de vecClass1[i] de la manière dont tu souhaite. // par exemple vecClass1[i] = new class1(arg du constructeur) }


Soit c'est qqch comme ça soit j'ai mal compris le pb Smiley

Alp
__________________________
Be C++
Mon Blog (C++, Intelligence Artificielle, Prolog)

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

dd_for_c++
Nouveau membre
Inscrit : 28/02/2005
Messages : 1
Message
#54466
Posté le 28/02/05 à 18:34
en fait ton premier code, créé bien 10 elements de ta classe "class1"; mais ensuite le template vector utilise le constructeur par copie de ta classe (ce constructeur est créé par défaut par le compilateur ...)
Donc, une seule solution: écrire un constructeur par copie.
exemple:

class class1
{
// mettre en privée les constructeurs par defaut
// est une bonne idee !
class1();

public:
// constructeur par copie
class1(const class1& c) {
cout << "class1 : constructeur par copie=> alloue :" << c.get_arraySize() << endl;

arraySize = c.get_arraySize ();
arrayInt = (int*)calloc(arraySize, sizeof(int));
}

class1(unsigned int arraySize) {
cout << "class1::class1() : " << arraySize << endl;
this->arraySize = arraySize;
arrayInt = (int*)calloc(arraySize, sizeof(int));
}
~class1() {}

int get_arraySize () const {
return arraySize;
}
protected:
int arraySize;
int* arrayInt;
};

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

essaion
Nouveau membre
Inscrit : 03/04/2005
Messages : 17
Message
#58874
Posté le 03/04/05 à 21:27
Je me demande comment ton code à pu être compilé...
Enfin j'ai repris ton code et l'es modifié pour qu'il respecte ce que tu voulais!


#include <iostream> #include <vector> using namespace std; class class1 { protected: int* arrayInt; // tableau d'entier public: // J'ai mis une valeur par défaut, pour que tu puisses avoir un contructeur par défaut à cause de vector<class1> sinon tu ne peux utiliser que vector<class1*> (et bonjour les allocations dynamiques) class1(unsigned int pSize=1) { if(pSize <= 0) arrayInt = NULL; // On sait jamais... else arrayInt = new int[pSize]; // C mieu, non? } ~class1() { if(arrayInt) // test du pointeur delete []arrayInt; // après un new toujours un delete! } }; void main(void) { int class1Nb = 10; unsigned int arraySize = 50; vector<class1> *vecClass1; // Je suis parti de cette base ... j'espère que c'est ça que tu veux allouer! // Création vecClass1 = new vector<class1>(class1Nb); // Container de 10 class1 for(int i=0;i<class1Nb;i++) vecClass1->push_back(class1(arraySize)); // Ajout d'un élément dans ton vecteur // les éléments de vector n'étant pas allouer ils seront détruits correctement lors de l'appel du destructeur de ton vector // Destruction du vector delete vecClass1; // la seule instance que tu es réalisées dans le main }


Enfin dernière petite info, la classe vector peut contenir plus que la taille spécifier lors de la construction, ces éléments supplémentaires sont gérer dynamiquement!
Il faut savoir que dans la STL il existe plusieur type de liste à toi de bien les choisir en fonction de tes besoins car si l'interface te permettra d'en faire ce que tu veux, les performances elles agissent en fonction du type de al liste que tu as créée.

Bien je crois que le problèmes est résolu, tu ne devrai plus avoir de problème avec ton pointeur, en tout cas moa j'en ai pas trouvé lol

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM LIBRAIRIE C++



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.