我从我正在维护的一些遗留代码中获得以下函数。可变参数函数的问题
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上崩溃。我现在已经将代码移到了Ubuntu Karmic中,而且我在Linux上的更严格的编译器时遇到了问题。是否有人能够发现是什么导致参数不能在var_arg()语句中正确读取?
我使用gcc版本编译4.4.1
编辑
引起SEGV声明是这样的一个:
start = getMaxStart(start, 1, ms1);
变量 '开始' 和 'MS1'代码执行第一次到达这一行时有有效的值。
你调用它的代码是什么样的? – 2010-05-28 00:47:57