나는 내가 유지 관리중인 일부 레거시 코드에서 다음 기능을 가지고있다.variadic 함수의 문제
long getMaxStart(long start, long count, const myStruct *s1, ...)
{
long i1, maxstart;
myStruct *s2;
va_list marker;
maxstart = start;
/*BUGFIX: 003 */
/*(va_start(marker, count);*/
va_start(marker, s1);
for (i1 = 1; i1 <= count; i1++)
{
s2 = va_arg(marker, myStruct *); /* <- s2 is assigned null here */
maxstart = MAX(maxstart, s2->firstvalid); /* <- SEGV here */
}
va_end(marker);
return (maxstart);
}
하나의 myStruct 인수 만 사용하여 함수를 호출하면 SEGV가 발생합니다. 이 코드는 VS2005를 사용하여 컴파일 할 때 Windows XP에서 충돌없이 컴파일되고 실행됩니다. 이제 우분투 커널로 코드를 옮겼고 Linux에서 더 엄격한 컴파일러에 문제가 있습니다. 아무도 매개 변수가 var_arg() 문에서 올바르게 읽히지 않는 원인을 찾아 낼 수 있습니까?
start = getMaxStart(start, 1, ms1);
변수 '시작'과 'MS1': 나는 버전의 gcc를 사용하여 컴파일하고
편집
SEGV를 일으키는 문이 하나
입니다 4.4.1 코드 실행이이 행에 처음 도달 할 때 유효한 값을가집니다.
당신이 말하는 코드는 어떻게 생겼습니까? –