2013-07-06 128 views
0

有誰知道爲什麼在運行時以下會導致分段錯誤?當連接到MySQL數據庫時出現分段錯誤c

#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

你傳遞一個空指針作爲第一個參數'mysql_real_connect' 。 –

+0

我認爲這是正確的。這樣做,而不是'MYSQL連接; mysql_init(&conn); mysql_real_connect(&conn,服務器,用戶,密碼,數據庫,0,NULL,0);' – KeepCalmAndCarryOn

回答

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, ...); 
+0

謝謝你做的伎倆! – frankr1977

2

分配的新的對象未存儲在您的代碼中。因此,您將NULL傳遞給mysql_real_connect()

改變這一行:

mysql_init(conn); 

到:

conn = mysql_init(conn); 

或直接相當:

conn = mysql_init(NULL); 
相關問題