संभव डुप्लिकेट:
Are there gotchas using varargs with reference parametersvarargs (va_list va_start) पास-दर-संदर्भ पैरामीटर के साथ काम नहीं करता है
हाय, मैं varargs साथ एक समस्या है। मेरा कोड देखें (माइक्रोसॉफ्ट विजुअल स्टूडियो 2005 या 2008)।
#include <stdarg.h>
struct Test { int a; };
void T1(int n, ...) {
va_list args;
va_start(args, n);
char* p = va_arg(args, char*);
va_end(args);
}
void T2(Test n, ...) {
va_list args;
va_start(args, n);
char* p = va_arg(args, char*);
va_end(args);
}
void T3(const Test& n, ...) {
va_list args;
va_start(args, n);
char* p = va_arg(args, char*); // p corrupt!!
va_end(args);
}
int _tmain(int argc, _TCHAR* argv[]) {
const Test t;
T1(1, "Test1");
T2(t, "Test2");
T3(t, "Test3");
return 0;
}
फ़ंक्शन टी 1, टी 2 अच्छी तरह से काम करता है। लेकिन टी 3 समारोह में एक समस्या है। पॉइंटर पी "टेस्ट 3" इंगित नहीं करता है। क्या मैं पास-बाय-रेफरेंस के साथ va_start का उपयोग नहीं कर सकता? अग्रिम धन्यवाद।
यह जी ++ में इच्छित व्यवहार प्रदर्शित करता है, लेकिन इसका वास्तव में इतना मतलब नहीं है, है ना? –