2012-02-08 5 views
0

J'ai écrit ce code:libyahoo Segmentation fault

#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; 
} 

compiler, gcc -l yahoo2 y.c -o yahoo et l'exécuter avec ./yahoo me donne une erreur: Segmentation fault

(gdb) run 

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

Code ligne 1735 est:

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

et voir ceci:

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

Comment est-ce que je débogue ceci?

Répondre

1

How do I debug this?

exécuter ces commandes:

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

Je dirais que l'un ou les deux commandes ci-dessus échouent, parce que yd ou yss est NULL.

Si oui, le problème est précédemment dans libyahoo2.c, et il (apparemment) ne vérifie pas les erreurs correctement.

La raison pour laquelle vous ne pouvez pas list YAHOO_CALLBACK est très probablement qu'il s'agit d'une macro. Regardez dans libyahoo2/yahoo2_callbacks.h - il est très susceptible d'être défini là.

En outre, votre commande lien ligne:

gcc -l yahoo2 y.c -o yahoo 

est tout à fait faux. Correcte ligne de commande doit être:

gcc y.c -o yahoo -lyahoo2 

Vous pouvez lire this explanation pour comprendre pourquoi l'ordre des sources et des bibliothèques en matière de ligne de commande.