2012-02-08 120 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理解为什么对命令行事宜源代码和库顺序。