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 :

Fuite mémoire still reachable


Sujet :

Langage C++

  1. #1
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut Fuite mémoire still reachable
    Bonjour à tous,

    J'ai un problème avec mon programme le problème proviendrait de ma classe Database à la ligne 11 et cela me pose un problème car j'ai des fuites mémoires...

    J'aurais de vous, pour me dire si cela vient de moi ou de mysql.h qui fait je ne sais quoi... Si j'ai fais des bêtises n'hésitez pas à me sermonner.

    Merci d'avance.

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    ==9435== 
    ==9435== HEAP SUMMARY:
    ==9435==     in use at exit: 73,944 bytes in 21 blocks
    ==9435==   total heap usage: 128 allocs, 108 frees, 131,848 bytes allocated
    ==9435== 
    ==9435== 24 bytes in 1 blocks are still reachable in loss record 1 of 5
    ==9435==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==9435==    by 0x4E851D1: my_malloc (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E818AA: my_error_register (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E626EC: mysql_server_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E6885E: mysql_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x402CCB: Database::Database() (Database.cpp:11)
    ==9435==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==9435==    by 0x402B20: GameManager::launchGame() (GameManager.cpp:74)
    ==9435==    by 0x402A92: GameManager::afficheMenu() (GameManager.cpp:51)
    ==9435==    by 0x402927: GameManager::initGame(std::string, std::string) (GameManager.cpp:22)
    ==9435==    by 0x405919: main (Main.cpp:42)
    ==9435== 
    ==9435== 144 bytes in 1 blocks are still reachable in loss record 2 of 5
    ==9435==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==9435==    by 0x4E851D1: my_malloc (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E80AB2: init_alloc_root (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E6CE1D: mysql_client_plugin_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E626F3: mysql_server_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E6885E: mysql_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x402CCB: Database::Database() (Database.cpp:11)
    ==9435==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==9435==    by 0x402B20: GameManager::launchGame() (GameManager.cpp:74)
    ==9435==    by 0x402A92: GameManager::afficheMenu() (GameManager.cpp:51)
    ==9435==    by 0x402927: GameManager::initGame(std::string, std::string) (GameManager.cpp:22)
    ==9435==    by 0x405919: main (Main.cpp:42)
    ==9435== 
    ==9435== 192 bytes in 1 blocks are still reachable in loss record 3 of 5
    ==9435==    at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==9435==    by 0x4E86B3E: my_thread_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E86E3C: my_thread_global_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E84A54: my_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E626CA: mysql_server_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E6885E: mysql_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x402CCB: Database::Database() (Database.cpp:11)
    ==9435==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==9435==    by 0x402B20: GameManager::launchGame() (GameManager.cpp:74)
    ==9435==    by 0x402A92: GameManager::afficheMenu() (GameManager.cpp:51)
    ==9435==    by 0x402927: GameManager::initGame(std::string, std::string) (GameManager.cpp:22)
    ==9435==    by 0x405919: main (Main.cpp:42)
    ==9435== 
    ==9435== 36,792 bytes in 9 blocks are still reachable in loss record 4 of 5
    ==9435==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==9435==    by 0x4E85582: my_once_alloc (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E7C774: ??? (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E7D2E3: ??? (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x5C573FF: pthread_once (pthread_once.S:104)
    ==9435==    by 0x4E7D763: get_charset_by_csname (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E68AA2: mysql_init_character_set (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E696E9: mysql_real_connect (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x402D4C: Database::connexion() (Database.cpp:23)
    ==9435==    by 0x402CD7: Database::Database() (Database.cpp:12)
    ==9435==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==9435==    by 0x402B20: GameManager::launchGame() (GameManager.cpp:74)
    ==9435== 
    ==9435== 36,792 bytes in 9 blocks are still reachable in loss record 5 of 5
    ==9435==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==9435==    by 0x4E85582: my_once_alloc (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E7C790: ??? (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E7D2E3: ??? (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x5C573FF: pthread_once (pthread_once.S:104)
    ==9435==    by 0x4E7D763: get_charset_by_csname (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E68AA2: mysql_init_character_set (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x4E696E9: mysql_real_connect (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==9435==    by 0x402D4C: Database::connexion() (Database.cpp:23)
    ==9435==    by 0x402CD7: Database::Database() (Database.cpp:12)
    ==9435==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==9435==    by 0x402B20: GameManager::launchGame() (GameManager.cpp:74)
    ==9435== 
    ==9435== LEAK SUMMARY:
    ==9435==    definitely lost: 0 bytes in 0 blocks
    ==9435==    indirectly lost: 0 bytes in 0 blocks
    ==9435==      possibly lost: 0 bytes in 0 blocks
    ==9435==    still reachable: 73,944 bytes in 21 blocks
    ==9435==         suppressed: 0 bytes in 0 blocks
    Ma classe Database.hpp :
    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
     
    #ifndef DATABASE_HPP_
    #define DATABASE_HPP_
     
    #include <iostream>
    #include <mysql/mysql.h>
    #include <vector>
     
    using namespace std;
     
    class Database {
    	MYSQL mysql;
    	MYSQL * conn;
     
    public:
    	Database();
    	~Database();
    	void connexion();
    	vector<vector<std::string> > query(std::string query);
    };
     
     
    #endif /* DATABASE_HPP_ */
    Ma classe Database.cpp :
    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
     
    #include "Database.hpp"
     
    Database::Database() {
    	mysql_init(&mysql);
    	Database::connexion();
    }
     
    Database::~Database() {
    	mysql_close(conn);
    }
     
     
     
    void Database::connexion() {
    	conn = mysql_real_connect(&mysql,"axxxxxxxxx","xxxxxxx","xxxx","xxxxxxxxx",0,NULL,0);
     
    	if (!conn)
    	{
    		cerr << "Failed to connect to database: Error : " << mysql_error(&mysql) << endl;
    	}
    }
     
    vector<vector<std::string> > Database::query(std::string query) {
    	vector<vector<std::string> > t;
    	MYSQL_RES * resultset ;
    	MYSQL_ROW row;
    	int queryState;
     
    	queryState = mysql_query(conn, query.c_str()) ;
     
    	if( queryState != 0 )
    	{
    		cout << "Query fail... Error: " << mysql_error(conn) << endl;
    	}
     
    	resultset = mysql_store_result(conn);
     
    	int numFields = mysql_num_fields(resultset);
    	int numResult = mysql_num_rows(resultset);
     
    	t.resize(numResult);
    	for (int i = 0; i < numResult; ++i) {
    		t[i].resize(numFields);
    	}
     
     
    	int i = 0;
    	while((row = mysql_fetch_row(resultset)))
    	{
    		for(int j=0;j < numFields; j++) {
    			t[i][j] = row[j];
    		}
    		i++;
    	}
     
    	mysql_free_result(resultset);
     
    	return t;
    }
    EDIT : J'espère que personne n'a vu les MDPs... xD

  2. #2
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Tu appelles mysql_init(&mysql) (et donc initialises la variable mysql) dans le constructeur, et tu appelles mysql_close(conn) (et donc détruis la variable conn) dans le destructeur.

    Tu ne fermes donc jamais mysql.

    Par ailleurs, ta méthode "connexion" ne mériterait-elle pas d'être mélangée au constructeur ? (pour éviter la désallocation de chose non allouée et autres joyeusetés)

    Enfin, tu ne devrais probablement pas écrire directement sur cerr dans Database, mais plutôt lancer une exception. En effet, le rôle d'une base de données est-il d'informer l'utilisateur des erreurs ? De plus, si jamais il y a une erreur, ton objet Database restera dans un état invalide, et donc va tout exploser.

    Donc, résumé des modifications :
    • Merge de Database::connexion avec le constructeur
    • Destruction de mysql dans le destructeur


    Avec ça, tu devrais pouvoir résoudre tes problèmes.

  3. #3
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut
    Non d'un clafoutis Cela ne fonctionne toujours pas...

    Valgrind :
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    ==7163== 
    ==7163== HEAP SUMMARY:
    ==7163==     in use at exit: 73,944 bytes in 21 blocks
    ==7163==   total heap usage: 128 allocs, 107 frees, 131,840 bytes allocated
    ==7163== 
    ==7163== 24 bytes in 1 blocks are still reachable in loss record 1 of 5
    ==7163==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==7163==    by 0x4E851D1: my_malloc (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E818AA: my_error_register (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E626EC: mysql_server_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E6885E: mysql_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x402CF8: Database::Database() (Database.cpp:11)
    ==7163==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==7163==    by 0x402B30: GameManager::launchGame() (GameManager.cpp:74)
    ==7163==    by 0x402AA1: GameManager::afficheMenu() (GameManager.cpp:51)
    ==7163==    by 0x402927: GameManager::initGame(std::string, std::string) (GameManager.cpp:22)
    ==7163==    by 0x405965: main (Main.cpp:42)
    ==7163== 
    ==7163== 144 bytes in 1 blocks are still reachable in loss record 2 of 5
    ==7163==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==7163==    by 0x4E851D1: my_malloc (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E80AB2: init_alloc_root (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E6CE1D: mysql_client_plugin_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E626F3: mysql_server_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E6885E: mysql_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x402CF8: Database::Database() (Database.cpp:11)
    ==7163==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==7163==    by 0x402B30: GameManager::launchGame() (GameManager.cpp:74)
    ==7163==    by 0x402AA1: GameManager::afficheMenu() (GameManager.cpp:51)
    ==7163==    by 0x402927: GameManager::initGame(std::string, std::string) (GameManager.cpp:22)
    ==7163==    by 0x405965: main (Main.cpp:42)
    ==7163== 
    ==7163== 192 bytes in 1 blocks are still reachable in loss record 3 of 5
    ==7163==    at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==7163==    by 0x4E86B3E: my_thread_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E86E3C: my_thread_global_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E84A54: my_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E626CA: mysql_server_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E6885E: mysql_init (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x402CF8: Database::Database() (Database.cpp:11)
    ==7163==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==7163==    by 0x402B30: GameManager::launchGame() (GameManager.cpp:74)
    ==7163==    by 0x402AA1: GameManager::afficheMenu() (GameManager.cpp:51)
    ==7163==    by 0x402927: GameManager::initGame(std::string, std::string) (GameManager.cpp:22)
    ==7163==    by 0x405965: main (Main.cpp:42)
    ==7163== 
    ==7163== 36,792 bytes in 9 blocks are still reachable in loss record 4 of 5
    ==7163==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==7163==    by 0x4E85582: my_once_alloc (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E7C774: ??? (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E7D2E3: ??? (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x5C573FF: pthread_once (pthread_once.S:104)
    ==7163==    by 0x4E7D763: get_charset_by_csname (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E68AA2: mysql_init_character_set (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E696E9: mysql_real_connect (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x402D30: Database::Database() (Database.cpp:12)
    ==7163==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==7163==    by 0x402B30: GameManager::launchGame() (GameManager.cpp:74)
    ==7163==    by 0x402AA1: GameManager::afficheMenu() (GameManager.cpp:51)
    ==7163== 
    ==7163== 36,792 bytes in 9 blocks are still reachable in loss record 5 of 5
    ==7163==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==7163==    by 0x4E85582: my_once_alloc (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E7C790: ??? (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E7D2E3: ??? (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x5C573FF: pthread_once (pthread_once.S:104)
    ==7163==    by 0x4E7D763: get_charset_by_csname (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E68AA2: mysql_init_character_set (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x4E696E9: mysql_real_connect (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
    ==7163==    by 0x402D30: Database::Database() (Database.cpp:12)
    ==7163==    by 0x401A3F: Monde::mondeExist(int, int) (Monde.cpp:21)
    ==7163==    by 0x402B30: GameManager::launchGame() (GameManager.cpp:74)
    ==7163==    by 0x402AA1: GameManager::afficheMenu() (GameManager.cpp:51)
    ==7163== 
    ==7163== LEAK SUMMARY:
    ==7163==    definitely lost: 0 bytes in 0 blocks
    ==7163==    indirectly lost: 0 bytes in 0 blocks
    ==7163==      possibly lost: 0 bytes in 0 blocks
    ==7163==    still reachable: 73,944 bytes in 21 blocks
    ==7163==         suppressed: 0 bytes in 0 blocks
    ==7163==
    Database.cpp :
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    /*
     * Database.cpp
     *
     *  Created on: 27 mai 2012
     *      Author: akrogames
     */
     
    #include "Database.hpp"
     
    Database::Database() {
    	mysql_init(&mysql);
    	if (!mysql_real_connect(&mysql,"xxxxx","xxxxxx","xxxxxxx","xxxxxx",0,NULL,0)) {
    		cerr << "Failed to connect to database: Error : " << mysql_error(&mysql) << endl;
    	}
    }
     
    Database::~Database() {
    	mysql_close(&mysql);
    }
     
    vector<vector<std::string> > Database::query(std::string query) {
    	vector<vector<std::string> > t;
    	MYSQL_RES * resultset ;
    	MYSQL_ROW row;
    	int queryState;
     
    	queryState = mysql_query(&mysql, query.c_str()) ;
     
    	if( queryState != 0 )
    	{
    		cout << "Query fail... Error: " << mysql_error(&mysql) << endl;
    	}
     
    	resultset = mysql_store_result(&mysql);
     
    	int numFields = mysql_num_fields(resultset);
    	int numResult = mysql_num_rows(resultset);
     
    	t.resize(numResult);
    	for (int i = 0; i < numResult; ++i) {
    		t[i].resize(numFields);
    	}
     
     
    	int i = 0;
    	while((row = mysql_fetch_row(resultset)))
    	{
    		for(int j=0;j < numFields; j++) {
    			t[i][j] = row[j];
    		}
    		i++;
    	}
     
    	mysql_free_result(resultset);
     
     
     
    	return t;
    }
     
     
    int Database::exec(std::string query) {
    	int queryState;
     
    	queryState = mysql_query(&mysql, query.c_str()) ;
     
    	if( queryState < 0 )
    	{
    		cout << "Query fail... Error: " << mysql_error(&mysql) << endl;
    	}
     
    	return queryState;
    }
    Je ne sais vraiment pas d'ou cela provient... Cela provient de mysql_init apparemment c'est étrange...

    Vous faites commenapparementt pour gérer vos accès et les requêtes vers une BDD vous ? Il n'y a pas une couche d'abstraction comme PDO en PHP ?

    Merci par avance.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    la doc de mysql_init.
    Essaye la 2° façon d'initialiser ta structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MYSQL* sql = mysql_init(NULL);
    mysql_close(sql);
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  2. [Fuites mémoire] Je cherche un utilitaire
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/02/2005, 10h03
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 12h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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