2012-12-05 68 views
0

在某些簡單的C++代碼中,出現「分段錯誤(核心轉儲)」錯誤。當我使用變量結果時,錯誤將會確認。在這種情況下會導致這個問題的是什麼?我知道有些東西超出範圍,但結果怎麼可能呢?數據庫中只有2個項目。簡單SQL代碼中的分段錯誤(核心轉儲)

#include <iostream> 
#include <boost/variant.hpp> 
#include <mysql/mysql.h> 
#include <mysql_connection.h> 

using namespace std; 

const char *server = "localhost"; 
const char *user = "XXXX"; 
const char *password = "XXXX"; 
const char *database = "XXXX"; 

int main() 
{ 
    MYSQL *conn; 
    MYSQL_RES *result; 
    MYSQL_ROW row; 

    int num_fields = 0; 

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

    mysql_query(conn, "SELECT * FROM `users` WHERE `id` = '5'"); 
    result = mysql_store_result(conn); 

    num_fields = mysql_num_fields(result); 

    while ((row = mysql_fetch_row(result))) 
    { 
     cout << "Spam "; 
    } 

    mysql_free_result(result); 
    mysql_close(conn); 
} 

錯誤:

Segmentation fault (core dumped) 

Process returned 139 (0x8B) execution time : 0.255 s 
Press ENTER to continue. 
+0

我的猜測是,要麼'mysql_init'或'mysql_real_connect'失敗,所以下面的調用使用不完整的對象/指針。嘗試調試。 –

+0

增加了一個if來確定那裏是否有問題,他們沒有失敗。 – Dagob

+0

謝謝你,我錯過了「mysql.sock」。用命令「sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock」解決它。如果你想,你可以添加,作爲答案;)。這是一個非常愚蠢的錯誤。但爲什麼錯過了。 – Dagob

回答

0

的解決方案是創建一個符號鏈接,使MySQL能夠找到的mysql.sock:

sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock