2013-04-19 1 views
0

У меня есть следующий код, который приводит к ошибке Segfaultфункция с многоточием в результате Segfault

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

Функция defnition идет как это ..

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

    } 

И я звоню функции, как это ..:

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

Я знаю, что у меня может быть меньше понимания эллипса. Пожалуйста, помогите мне.
Заранее спасибо ..

+0

Вы попробовали отладить его? в какой строке это происходит? – anishsane

+1

Пожалуйста, предоставьте минимальный, скомпилированный тестовый тест, чтобы мы могли воспроизвести вашу проблему в наших системах. – Sebivor

+0

Отладка .. да .. именно при этом вызове функции, он терпит неудачу и бросает мне ошибку segfault .. – 302Found

ответ

1

Я не мог точно предположить причину аварии.

Но использовать следующее определение макроса вместо

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

и посмотреть, если это исправить аварии

+0

Нет .. Это не работает .. :( – 302Found

0

Что pcMsgId, это строка формата, и в этом случае должно быть соответствие% для каждое число (% d,% u,% ld или% lu), если pcMsgId не является строкой формата, то как функция mapgw_cm_trace знает, когда аргументы закончились, для массива указателей обычно это конечный NULL, для других типов обычно есть аргумент count. Также обычно бывает, что если pcMsgId не является строкой форматирования, то следующие аргументы имеют одинаковый тип, такой как pcMsgId. В основном, как определяется количество аргументов, следующих за pcMsgId.