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:
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:
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:
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