libyahoo分段错误

时间:2012-02-08 23:54:52

标签: c linux yahoo

我写了这段代码:

#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 个答案:

答案 0 :(得分:1)

  

如何调试?

执行以下命令:

(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以了解为什么命令行中的源和库的顺序很重要。