我想用C语言封装一个与MySQL的接口函数库,提供connect,query,close三个接口。connect返回一个MYSQL变量供query和close使用。但是不希望调用我函数的人不需要再关心MySQL的东西,包括头文件。也就是说调用我函数的人不需要关心我的函数使用的是
我想用C语言封装一个与MySQL的接口函数库,提供connect,query,close三个接口。connect返回一个MYSQL变量供query和close使用。但是不希望调用我函数的人不需要再关心MySQL的东西,包括头文件。也就是说调用我函数的人不需要关心我的函数使用的是什么样的数据库。它只需要按照我的函数接口调用我的函数就可以了。现在遇到的一个问题就是我的connect函数定义为void *connect(char *host,char *pwd),在函数内部将连接好的MYSQL 类型变量强制转化成void *返回:return (void *)&mysql; 然后,在query(void *mysql,...)函数和void close(void *mysql)中想将void *在强制转换到MYSQL,然后再对这个MYSQL连接进行操作。这时,程序core了。部分源码如下:
void *connect_to_db()
{
MYSQL_CONN confMysql;
char sql[256];
char err[256];
char ret = 0;
if(!mysql_init(&confMysql))
{
printf("Initial MYSQL failed\n");
return NULL;
}
if(!mysql_real_connect(&confMysql,"localhost","root",NULL,"commconf",0,NULL,0))
{
printf("Can't connect to mysql server\n");
return NULL;
}
return (void*)&confMysql;
}
void close_db_connect(void *conn)
{
MYSQL *mysql;
mysql_init(mysql);
mysql = (MYSQL *)conn;
mysql_close(mysql);
if (mysql_errno(mysql))
{
printf("Close connect error:%s\n",mysql_error(mysql));
}
}
int main()
{
void *db;
db = connect_to_db("localhost","root");
if (!db)
{
printf("Connect to mysql error\n");
return -1;
}
close_db_connect(db);
return 0;
}
程序最终在mysql_close(mysql)这一行coredump了。
请各位大虾指教,这到底是为什么?该如何做?
展开
全部