我在 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 进行测试以查看行为是否消失