有谁知道为什么以下会在运行时导致分段错误?
#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
请帮忙!
答案 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, ...);