Bonjour,
je cherche à utiliser une base de données mysql dans du code C dans le cadre d'une identifcation d'utilisateur.
Lorsque j'effectue la requête et qu'un utilisateur est dans la table, pas de problème! Mais quand je rentre un utilisateur qui n'est pas dans la table et dont le login fait plus de 9 caractères, le programme plante et me donne ce message d'erreur :
*** glibc detected *** free(): invalid next size (fast): 0x08875180 ***
Abandon
Je suppose que c'est une erreur de grandeur d'un buffeur de mysql mais je ne sais pas lequel ni comment le modifier.
Merci,
Voici mon code C qui contient les descriptions des tables en commentaire:
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
83
84
85
86
87 #include <stdio.h> #include<string.h> #include<stdlib.h> #include <mysql.h> using namespace std; extern "C" { static char *server_args[] = { "this_program", /* this string is not used */ "--basedir=/usr/local/mysql/", "--datadir=/usr/local/mysql/var" // "--key_buffer_size=32M" }; static char *server_groups[] = { "embedded", "server", "this_program_SERVER", (char *)NULL }; } int recherche_id_user(MYSQL* mysql, const char * login) { char * query = (char*) malloc(sizeof("select id from USER where (login = '")); strcpy(query,"select id from USER where (login = '"); strcat(query,login); strcat(query,"')"); printf("%s\n",query); printf("%d\n",mysql_real_query(mysql,query,strlen(query))); MYSQL_RES * resultat=NULL; resultat = mysql_store_result(mysql); if (mysql_num_rows(resultat)==1) { MYSQL_ROW row; printf("nombre de row dans le set : %d \n",mysql_num_rows(resultat)); row= mysql_fetch_row(resultat); mysql_free_result(resultat); return atoi(row[0]); } else { mysql_free_result(resultat); return 0; } } extern "C" { int main(void) { if (mysql_server_init(sizeof(server_args) / sizeof(char *), server_args, server_groups)) exit(1); const char * login = "Gillain"; const char * fct = "AJOUT"; int id_usr=0,id_fct=0; MYSQL_RES* resultat = NULL; /* Use any MySQL API functions here */ mysql_init(NULL); MYSQL* mysql = NULL; MYSQL_ROW row ; mysql=mysql_init(NULL); mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client"); mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL); mysql=mysql_real_connect(mysql,"localhost","root","","ACCESS",0,NULL,0); id_usr=recherche_id_user(mysql,login); if(id_usr != 0) { // id_fct=rechercher_id_fct(mysql,fct); printf("connection à la base de données effectuée %d\n",id_usr); printf(" voila le code de la connexion a ACCESS!\n"); } mysql_close(mysql); mysql_server_end(); return EXIT_SUCCESS; } }[Balises codes ajoutées par fearyourself, merci d'y penser la prochaine fois]// +------------------+
// | Tables_in_ACCESS |
// +------------------+
// | DROIT |
// | FCT |
// | MODULE |
// | USER |
// +------------------+
// 4 rows in set (0,00 sec)
//
// mysql> describe FCT
// -> ;
// +----------+--------------+------+-----+---------+----------------+
// | Field | Type | Null | Key | Default | Extra |
// +----------+--------------+------+-----+---------+----------------+
// | id | mediumint(9) | | PRI | NULL | auto_increment |
// | nom | char(30) | YES | | NULL | |
// | moduleid | mediumint(9) | | | 0 | |
// +----------+--------------+------+-----+---------+----------------+
// 3 rows in set (0,02 sec)
//
// mysql> describe DROIT;
// +--------+--------------+------+-----+---------+-------+
// | Field | Type | Null | Key | Default | Extra |
// +--------+--------------+------+-----+---------+-------+
// | iduser | mediumint(9) | | | 0 | |
// | idfct | mediumint(9) | | | 0 | |
// +--------+--------------+------+-----+---------+-------+
// 2 rows in set (0,00 sec)
//
// mysql> describe MODULE;
// +-------------+--------------+------+-----+---------+----------------+
// | Field | Type | Null | Key | Default | Extra |
// +-------------+--------------+------+-----+---------+----------------+
// | id | mediumint(9) | | PRI | NULL | auto_increment |
// | nom | varchar(30) | YES | | NULL | |
// | description | varchar(120) | YES | | NULL | |
// +-------------+--------------+------+-----+---------+----------------+
// 3 rows in set (0,00 sec)
//
// mysql> describe USER;
// +-------+--------------+------+-----+---------+----------------+
// | Field | Type | Null | Key | Default | Extra |
// +-------+--------------+------+-----+---------+----------------+
// | id | mediumint(9) | | PRI | NULL | auto_increment |
// | login | char(30) | | | | |
// +-------+--------------+------+-----+---------+----------------+
// 2 rows in set (0,00 sec)
Partager