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