У меня проблемы в Visual Studio 2003 со следующим:
void foo(const char*& str, ...) {
va_list args;
va_start(args, str);
const char* foo;
while((foo = va_arg(args, const char*)) != NULL) {
printf("%s\n", foo);
}
}
Когда я называю это:
const char* one = "one";
foo(one, "two", "three", NULL);
Я получил:
Местоположение чтения нарушения доступа 0xcccccccc
в строке printf()
-- va_arg()
вернул 0xcccccccc. Наконец-то я обнаружил, что первый параметр — это ссылка, которая его ломает — если я сделаю его обычным char*, все будет в порядке. Кажется, не имеет значения, какой это тип; будучи ссылкой приводит к сбою во время выполнения. Это известная проблема с VS2003, или это каким-то образом является законным? В GCC этого не происходит; Я не тестировал более новые Visual Studio, чтобы увидеть, исчезнет ли поведение.