Приветствую.
Больше спасибо за ответы, в результате исследований выяснил, что проблема скорее всего не в MySQL, а где-то в недрах языка С :)
#define MSGLEN 32
#define BUFFLEN 1024
int db_init(MYSQL *Conn)
{
MYSQL *c;
c = malloc(sizeof(MYSQL));
if ( c == NULL )
return 0;
memcpy(c, Conn, sizeof(MYSQL));
/* initialize the connection object here */
if ( mysql_init(Conn) == NULL ) {
free(c);
return FAIL;
}
/* connect main database here */
if( !mysql_real_connect(Conn, c->host, c->user, c->passwd, c->db, 0, NULL, 0) ) {
free(c);
return DB_DOWN;
}
/* select database */
if( mysql_select_db(Conn, c->db) ) {
free(c);
return FAIL;
}
free(c);
return SUCCESS;
}
typedef struct msg_s {
unsigned char msg_flag;
unsigned char msg_type;
unsigned char msg_rc; /* reply code */
char msg_id[MSGLEN];
char msg_passwd[MSGLEN];
char msg_fqdn[MSGLEN];
char msg_ipaddr[MSGLEN];
char msg_serialno[MSGLEN];
} msg_t;
msg_t *msg, *msg2;
MYSQL conn;
...
msg = malloc( sizeof(msg_t) );
msg2 = malloc( sizeof(msg_t) );
if ( !msg || !msg2 ) {
/* error message */
exit(EXIT_FAILURE);
}
/* здесь вызывается функция, получающая из сети сообщение содержащее данные типа структуры msg_t. Данные приходят верные, проверено */
/* сохраним копию буфера */
memcpy(msg2, msg, sizeof(msg_t));
/* готовимся к инициализации MySQL */
conn.host = "192.168.11.22";
conn.user = "user";
conn.passwd = "pass";
conn.db = "userdb";
if ( db_init(&conn) != SUCCESS ) {
/* error message */
...
}
И вот уже здесь, на этом этапе, независимо от успеха-удачи функции db_init() указатель msg и msg2 указывают на адрес 0x00! Дальнейшая работа с этим указателем приводит к segmentation fault.
Почему так происходит, может ли кто подсказать по имеющейся информации?
Заранее благодарю.