2012-02-08 118 views
0

我寫了這個代碼:libyahoo分段故障

#include <libyahoo2/yahoo2.h> 
#include <libyahoo2/yahoo2_callbacks.h> 


int main() { 
    int id ; 
    char username[255] = "slam"; 
    char password[255] = "ss" ; 
    id = yahoo_init(username, password); 
    enum yahoo_status mYahoo ; 
    mYahoo = YAHOO_STATUS_AVAILABLE ; 
    yahoo_login(id , mYahoo); 


    return 0; 
} 

編譯它,gcc -l yahoo2 y.c -o yahoo./yahoo運行它給了我一個錯誤:Segmentation fault

(gdb) run 

Program received signal SIGSEGV, Segmentation fault. 
0x001379b1 in yahoo_login (id=1, initial=0) at libyahoo2.c:1735 

線1735的代碼是:

tag = YAHOO_CALLBACK(ext_yahoo_connect_async) (yd->client_id, 
     host, yss->pager_port, yahoo_connected, ccd, 0); 

看到這個:

(gdb) list YAHOO_CALLBACK 
Function "YAHOO_CALLBACK" not defined. 

我該如何調試?

回答

1

How do I debug this?

執行以下命令:

(gdb) print yd->client_id 
(gdb) print yss->pager_port 

我的猜測是,一個或兩個以上的命令就會失敗,因爲ydyss爲NULL。

如果是這樣,問題是早些時候在libyahoo2.c,它(顯然)不正確檢查錯誤。

你不能list YAHOO_CALLBACK的原因很可能是它是一個宏。查看libyahoo2/yahoo2_callbacks.h - 很可能在此處定義。

而且,你的鏈接命令行:

gcc -l yahoo2 y.c -o yahoo 

完全是僞造的。正確的命令行應該是:

gcc y.c -o yahoo -lyahoo2 

您可能需要閱讀this explanation理解爲什麼對命令行事宜源代碼和庫順序。