C操作MySQL段错误
zxywd 2010-06-07 10:33:14 大家好,请教一个C连接MySQL段错误的问题:
代码如下:
MySQLConn.c
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
MYSQL mysql;
int main()
{
char host[30]="localhost";
char user[30]="root";
char passwd[30]="zxy2008";
char dbname[32]="mysql";
if(mysql_init(&mysql)==NULL)
{
printf("Error initialing MySQL!\n");
return 1;
}
if(mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0)==NULL)
{
printf("Error connecting MySQL!\n");
return 1;
}
else
printf("Succeed connecting MySQL!\n");
int i=close();
printf("%d\n",i);
return 0;
}
int close()
{
mysql_close(&mysql);
return 0;
}
编译:
cc -o MySQLConn $(mysql_config --cflags) MySQLConn.c $(mysql_config --libs) -g
运行:./MySQLConn
段错误
使用gdb调试:gdb MySQLConn
(gdb) run
[Thread debugging using libthread_db enabled]
Program received signal SIGPIPE, Broken pipe.
0x0012d422 in __kernel_vsyscall ()
我不使用close函数,将代码写成下面的形式,只用一个main函数,就没有任何问题。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
MYSQL mysql;
int main()
{
char host[30]="localhost";
char user[30]="root";
char passwd[30]="zxy2008";
char dbname[32]="mysql";
if(mysql_init(&mysql)==NULL)
{
printf("Error initialing MySQL!\n");
return 1;
}
if(mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0)==NULL)
{
printf("Error connecting MySQL!\n");
return 1;
}
else
printf("Succeed connecting MySQL!\n");
mysql_close(&mysql);
return 0;
}
编译:cc -o MySQLConn $(mysql_config --cflags) MySQLConn.c $(mysql_config --libs)
执行:./MySQLConn
运行结果:Succeed connecting MySQL!
为什么我在main函数里面关闭MySQL连接就没有问题?而将MySQL连接关闭写在main函数外用一close函数,就出问题呢?为什么会出现这种结果,如何解决这个问题呢?希望各位高手帮忙解决一下,谢谢。