C에서 varadic 함수를 로그 파일에 쓸 수 있지만 호출하자 마자 헤더에 세그먼트 오류가 발생합니다. 주 처리에서는 C - Variadic 함수가 컴파일되지만 세분화 오류가 발생합니다.
는 호출이 형식은 :mqbLog("LOG_INFORMATION",0,0,"Connect",0,"","Parameter received");
및 기능은 이러한 방식으로 정의된다 :
void mqbLog(char *type,
int numContext,
double sec,
char *service,
int sizeData,
char *data,
char *fmt,
...
)
{
//write the log in the archive
}
그것은 OK 컴파일한다. 나는이 과정을 디버깅 할 때, mqbLog
함수에 대한 호출이 이루어집니다, 그것은 나에게 기능의 오픈 브래킷의 세그먼트 오류를 준다, 그래서 함수 값에 대해 질문 할 수 있습니다
(gdb) p type
$1 = 0x40205e "LOG_INFORMATION"
(gdb) p numContext
$2 = 0
(gdb) p sec
$3 = 0
(gdb) p service
$4 = 0x0
(gdb) p sizeData
$5 = 4202649
(gdb) p data
$6 = 0x0
어떤 아이디어가 될 것입니다 감사하게 받았습니다.
해당 기능을 구현할 때 버그가 있습니다. 먼저 ''주변의 해당 매뉴얼을 읽는 것이 좋습니다. –
오류를 복제 할 충분한 코드를주십시오. –
함수 선언은 어디에 있습니까? 호출은 프로토 타입의 범위에서'0'을'0.0'으로 암시 적으로 변환하는 것에 의존합니다. 함수가 호출되는 프로토 타입을 생략하면 본질적으로 정의되지 않은 동작입니다. variadic 함수를 호출하기 전에 반드시 범위에서 프로토 타입을 가져야합니다. 함수가 작동하지 않지만 함수를 구현 한 방법이 표시되지 않았습니다. 우리가 어떻게 디버깅 할 수 있다고 기대합니까? 당신이 잘못 할 수있는 일이 많이 있습니다. 그들 중 많은 수가 충돌로 이어질 수 있습니다. 충돌을 재현하는 MCVE ([MCVE])를 포함 시키십시오. –