va_arg 以 mac 上的第二个参数开始 (clang++)
va_arg begins by the second parameter on mac (clang++)
代码
TextureMeta(string tex_, int args_, const char* ...)
{
va_list vl;
va_start(vl, args_);
for (int i = 0; i < args_; i++)
{
string img_(va_arg(vl, char*));
cout << img_ << endl;
images.push_back(img_);
}
va_end(vl);
}
在 MSVC 上它工作正常但在 MacOS 上生成的应用程序出现分段错误,
我可以看到代码首先打印第二个参数,日志显示 TextureMeta(this=0x000000010174d680, tex_="resource/skybox/mitsuumi", args_=6, (null)="resource/skybox/mitsuumi/right.jpg")
,似乎第一个 va 参数成为函数参数并且无法迭代。
我正在使用 CMake,生成器是默认的。
这是 mac clang 错误吗?
或者上面的代码中是否有未定义的标准?
TextureMeta(string tex_, int args_, const char* ...)
这是
的简称
TextureMeta(string tex_, int args_, const char*, ...)
这意味着你在省略号之前有3个正则参数。你想要的是:
TextureMeta(string tex_, int args_, ...)
代码
TextureMeta(string tex_, int args_, const char* ...)
{
va_list vl;
va_start(vl, args_);
for (int i = 0; i < args_; i++)
{
string img_(va_arg(vl, char*));
cout << img_ << endl;
images.push_back(img_);
}
va_end(vl);
}
在 MSVC 上它工作正常但在 MacOS 上生成的应用程序出现分段错误,
我可以看到代码首先打印第二个参数,日志显示 TextureMeta(this=0x000000010174d680, tex_="resource/skybox/mitsuumi", args_=6, (null)="resource/skybox/mitsuumi/right.jpg")
,似乎第一个 va 参数成为函数参数并且无法迭代。
我正在使用 CMake,生成器是默认的。
这是 mac clang 错误吗? 或者上面的代码中是否有未定义的标准?
TextureMeta(string tex_, int args_, const char* ...)
这是
的简称TextureMeta(string tex_, int args_, const char*, ...)
这意味着你在省略号之前有3个正则参数。你想要的是:
TextureMeta(string tex_, int args_, ...)