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