2013-04-19 4 views
0

J'ai le code suivant qui se traduit par erreur segfaultavec des points de suspension entraînant segfault

#define MAPGW_CM_TRACE(...) mapgw_cm_trace(__VA_ARGS__) 

Fonction défnition va comme ça ..

int mapgw_cm_trace(int trapLog, char *pcMsgId, ...) 
    { //do something 

    } 

Et j'appelle la fonction comme celui-ci ..:

MAPGW_CM_TRACE(1,"<some String>", 
       23,233, 4783274, 2138123, 23123, 21312,23112); 

Je sais que je pourrais avoir moins de compréhension de l'ellipse. S'il vous plaît aidez-moi à travers.
Merci d'avance ..

+0

avez-vous essayé de le déboguer? Sur quelle ligne échoue-t-il? – anishsane

+1

Veuillez fournir un testcase minimal compilable afin que nous puissions reproduire votre problème sur nos systèmes. – Sebivor

+0

Débogage .. oui .. exactement à cet appel de fonction, il échoue et me jette l'erreur segfault .. – 302Found

Répondre

1

Je ne pouvais pas deviner exactement la cause de l'accident.

Mais utiliser la définition macro suivante à la place

#define MAPGW_CM_TRACE(TRAP,MSGID,args...) mapgw_cm_trace(TRAP,MSGID,##args); 

et voir si elle fixe l'accident

+0

Non .. Il ne fonctionne pas .. :( – 302Found

0

Qu'est-ce pcMsgId, est une chaîne de format, auquel cas il doit être un% correspondant pour chaque nombre (% d,% u,% ld ou% lu), si pcMsgId n'est pas une chaîne de format alors comment la fonction mapgw_cm_trace sait quand les arguments sont terminés, pour un tableau de pointeurs c'est généralement une valeur NULL, pour d'autres types il y a généralement un argument count. En général, si pcMsgId n'est pas une chaîne de format, les arguments suivants sont tous du même type que pcMsgId. Fondamentalement comment est déterminé le nombre d'arguments suivant pcMsgId.

Questions connexes