我從我正在維護的一些遺留代碼中獲得以下函數。可變參數函數的問題
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