IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

classe vector problème


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut classe vector problème
    Bonjour,
    voilà j'ai un code qui plante à la sortie de la fonction et je ne comprends pas pourquoi.
    Est ce que quelqu'un aurait une idée du problème ?
    Je pense que c'est l'utilisation du vecteur 2D mais je ne comprends pas pourquoi.

    Voilà le code qui plante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
     
    typedef struct
    {
    	int x;
            int y;
    } CvPoint ;
     
    typedef struct
    {
    	CvPoint Point;
    	int imgIndex;
    	int Month,Day,Hour,Minute;
    	int iSize;
    } OBJECT;
     
    bool test();
     
    int main()
    {
     
    	test();
    	return 0;
    }
     
     
    bool test()
    {
    	std::vector< std::vector< OBJECT > > vectObjects; // all detected objects
    	std::vector< OBJECT > vObjects; // all detected objects
    	OBJECT object;
     
    	for (int k = 0; k<3000 ;k++)
    	{
    		for (int i = 0; i<3000 ;i++)
    		{
    			object.Day = 20;
    			object.Minute = 1;
    			vObjects.push_back(object);
    		}
     
    		vObjects.push_back(object);
    		vectObjects.push_back(vObjects);
     
    		vObjects.clear();
    		if (k%500==200)
    			vectObjects.clear();
     
    	}
     
    	vObjects.~vector();
    	vectObjects.~vector(); // pb ici
     
    	return 0;
    }
    Merci d'avance à celui qui trouvera !

  2. #2
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct
    {
    	int x;
            int y;
    } CvPoint ;
     
    typedef struct
    {
    	CvPoint Point;
    	int imgIndex;
    	int Month,Day,Hour,Minute;
    	int iSize;
    } OBJECT;
    Tu fais du C++, pas du C.
    Les typedef sont inutiles.
    F.A.Q. C++: Quelle est la différence entre class et struct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	vObjects.~vector();
    	vectObjects.~vector(); // pb ici
    F.A.Q. C++: Est-il possible d'invoquer explicitement le destructeur d'une classe ?


    Une dernière chose, le constructeur par défaut d'une classe appelle le constructeur par défaut des attributs membres, sauf pour ceux dont le type est basique (int, double, char, bool, ...) ; ceux-là sont laissés non-initialisés.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut réponse
    merci pour cette réponse très complète.
    Si j'ai bien compris j'utilise les classes (et non les typedef) et pour désallouer mes vecteurs j'utilise un simple clear()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
     
     
    class CvPoint
    {
    public :
        int x;
        int y;
    };
     
    class OBJECT
    {
    public :
     
        CvPoint Point;
    	int imgIndex;
    	int Month,Day,Hour,Minute;
    	int iSize;
    };
     
    bool test();
     
    int main()
    {
    	while(1)
    	test();
    	return 0;
    }
     
     
    bool test()
    {
    	std::vector< std::vector< OBJECT > > vectObjects; // all detected objects
    	std::vector< OBJECT > vObjects; // all detected objects
    	OBJECT object;
     
    	for (int k = 0; k<3000 ;k++)
    	{
    		for (int i = 0; i<3000 ;i++)
    		{
    			object.Day = 20;
    			object.Minute = 1;
    			vObjects.push_back(object);
    		}
     
    		vObjects.push_back(object);
    		vectObjects.push_back(vObjects);
     
    		vObjects.clear();
    		if (k%500==200)
    			vectObjects.clear();
     
    	}
     
    	vObjects.clear();
    	vectObjects.clear();
     
    	return 0;
    }

    Comme ça ?
    en tout cas ça marche et j'ai l'impression qu'il n'y a pas de fuite mémoire

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Pas besoin de clear en fin, le destructeur de vector est appelé automatiquement

  5. #5
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Citation Envoyé par mattox37 Voir le message
    Si j'ai bien compris j'utilise les classes (et non les typedef)
    Ce que je voulais dire, c'est que tu peux définir un struct sans faire de typedef pour utiliser son nom tel quel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <iostream>
     
    struct Point
    {
        int x;
        int y;
    };
     
     
    int main()
    {
        Point M;
        M.x = 5;
        M.y = -9;
        std::cout << '(' << M.x << ',' << M.y << ')' << std::endl;
        return 0;
    }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut fin
    Merci encore pour vos réponses, c'est plus clair maintenant.
    Effectivement j'ai fait un test sans détruire le vecteur et je n'ai pas de fuite mémoire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec class vector
    Par abdelmajid_daosabah dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/11/2007, 22h40
  2. Problème avec la classe Vector.
    Par kaelem dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2006, 09h19
  3. Problème Classe Vector Java
    Par playmobilette dans le forum Langage
    Réponses: 9
    Dernier message: 16/11/2006, 17h58
  4. problème class vector
    Par Pe04 dans le forum SL & STL
    Réponses: 2
    Dernier message: 27/02/2006, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo