有人知道为什么下面的代码在运行时会导致分段错误吗?
#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请帮帮我!
发布于 2013-07-07 05:53:23
您正在向mysql_real_connect传递NULL-pointer。根据文档,mysql_init将返回一个初始化的MYSQL对象(当传递给它一个NULL-pointer时)。将您的代码更改为以下代码以使用返回值:
conn = mysql_init(conn);或者这样,让mysql_init填充对象:
MYSQL conn; /* note that this isn't a pointer */
mysql_init(&conn);
...
mysql_real_connect(&conn, ...);发布于 2013-07-07 05:52:15
分配的新对象不会存储在代码中。因此,您要将NULL传递给mysql_real_connect()。
更改此行:
mysql_init(conn);至:
conn = mysql_init(conn);或者更直接地说:
conn = mysql_init(NULL);https://stackoverflow.com/questions/17507415
复制相似问题