使用c连接到mysql数据库时出现分段错误

时间:2013-07-06 21:43:30

标签: mysql c unix segmentation-fault

有谁知道为什么以下会在运行时导致分段错误?

#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>

void main(void)
{
    printf("MySQL client version : %s\n", mysql_get_client_info());
    MYSQL *conn=NULL;
    mysql_init(conn);
    char *server = "localhost";
    char *user = "root";
    char *password = "pass";
    char *database = "weather";
    char *table ="room_temp";
    char *tst_qry="INSERT INTO `weather`.`room_temp` (`idx`, `date`, `temperature`) VALUES (NULL, CURRENT_TIMESTAMP, '10')";

        mysql_real_connect(conn, server, user, password, database, 0, NULL, 0);


}

我遵守如下

gcc -o mysql $(mysql_config --cflags) mysql.c $(mysql_config --libs)

输出如下,

MySQL client version : 5.5.31
Segmentation fault

请帮忙!

2 个答案:

答案 0 :(得分:2)

分配的 new 对象未存储在您的代码中。因此,您将NULL传递给mysql_real_connect()

更改此行:

mysql_init(conn);

为:

conn = mysql_init(conn);

或者更直接地说:

conn = mysql_init(NULL);

答案 1 :(得分:1)

您正在向NULL传递mysql_real_connect指针。根据文档mysql_init返回一个初始化的MYSQL对象(当传递NULL - 指针时)。将代码更改为此值以使用返回值:

conn = mysql_init(conn);

或者这个,让mysql_init填充对象:

MYSQL conn; /* note that this isn't a pointer */
mysql_init(&conn);
...
mysql_real_connect(&conn, ...);