2012-10-17 77 views
3

這是我試圖運行的代碼。它編譯得很好,直到昨天工作很好。爲什麼我得到一個分段錯誤(核心轉儲)?

#include <my_global.h> 
#include <mysql.h> 

int main(int argc, char **argv) 
{ 

    MYSQL *conn; 
    MYSQL_RES *result; 
    MYSQL_ROW row; 
    int num_fields; 
    int i; 

    conn = mysql_init(NULL); 
    mysql_real_connect(conn, "hostname", "username", "password", "database_name", 0, NULL, 0); 

    mysql_query(conn, "SELECT * FROM tabletest"); 
    result = mysql_store_result(conn); 

    num_fields = mysql_num_fields(result); 

    while ((row = mysql_fetch_row(result))) 
    { 
     for(i = 0; i < num_fields; i++) 
     { 
      printf("%s ", row[i] ? row[i] : "NULL"); 
     } 
     printf("\n"); 
    } 

    mysql_free_result(result); 
    mysql_close(conn); 

} 

注意,對於mysql_real_connect()的參數是通用這裏的隱私,但就像我說的,昨天的工作。當我試圖在編譯成功後運行代碼時,我得到:

Segmentation fault (core dumped) 
+2

「它昨天工作」不是一個很好的藉口「我不檢查我的mysql API調用的結果」。添加錯誤檢查,並縮小您的搜索到有問題的函數調用。 – paddy

+0

是完整的錯誤跟蹤? –

+0

和回溯? –

回答

4

Paddy指出了關鍵問題,我沒有錯誤檢查。錯誤檢查後,我發現我沒有被授權訪問我的遠程服務器,並獲得

Error 1045: Access denied for user 'username'@'ip' (using password: YES) 

然後我意識到,我的電腦的IP地址,將其打開後改變。我從來不知道這件事發生。所以我不得不回到cPanel,並將我的'新'IP地址添加到MySQL的遠程訪問列表中,並且它可以工作。現在的問題是要了解我的IP地址如何保持靜態。

故事的寓意是總是處理錯誤。