У меня есть следующая функция из некоторого устаревшего кода, который я поддерживаю.
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. Код скомпилирован и работает без сбоев в Windows XP, когда я скомпилировал его с использованием VS2005. Теперь я переместил код в Ubuntu Karmic, и у меня возникли проблемы с более строгим компилятором в Linux. Кто-нибудь может определить причину неправильного чтения параметра в выражении var_arg ()?
Я компилирую с использованием gcc версии 4.4.1
Редактировать
Утверждение, вызывающее SEGV, таково:
start = getMaxStart(start, 1, ms1);
Переменные 'start' и 'ms1' имеют допустимые значения, когда выполнение кода впервые достигает этой строки.