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;
}
}
// +------------------+
// | 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)
[Balises codes ajout�es par fearyourself, merci d'y penser la prochaine fois]