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 でテストしていません