Visual Studio 2017 - 错误 MSB6006:"CL.exe" 退出代码 2
Visual studio 2017 - error MSB6006: "CL.exe" exited with code 2
使用Visual Studio 2017构建项目时,我遇到了以下错误:
错误MSB6006:";CL.exe";退出,代码为2。
这是我的代码:
int main()
{
const int WIDTH=800;
const int HEIGHT=600;
Bitmap bitmap(WIDTH, HEIGHT);
unique_ptr<int[]> histogram(new int[Mandelbrot::MAX_ITERATIONS + 1]{ 0 });
unique_ptr<int[]> fractal(new int[WIDTH*HEIGHT]{ 0 });
//int fractal[WIDTH*HEIGHT]{ 0 };
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
double xFractal = (x - WIDTH / 2 - 200)*2.0 / HEIGHT;
double yFractal = (y - HEIGHT / 2)*2.0 / HEIGHT;
int iterations = Mandelbrot::getIterations(xFractal, yFractal);
if (iterations != Mandelbrot::MAX_ITERATIONS) {
histogram[iterations]++;
}
fractal[y*WIDTH + x] = iterations;
uint8_t color = 256 * (double)iterations / Mandelbrot::MAX_ITERATIONS;
color = color*color*color;
bitmap.setPixels(x, y, color, color, color);
}
}
bitmap.write("Mandelbrot.bmp");
return 0;
}
问题似乎是分形阵列的声明:
unique_ptr<int[]> fractal(new int[WIDTH*HEIGHT]{ 0 });
如果我对此进行注释(以及其他带有分形变量的行),代码编译得很好,如果我将唯一指针更改为普通int数组,代码会编译,但在调试时会抛出异常,表示堆栈溢出。
减小数组的大小就解决了这个问题,所以程序看起来没有足够的内存空间来运行。我在谷歌上搜索了很多,发现visual studio通过deafult将堆栈大小限制为1MB(我可能错了),但我找不到如何在visual studio 2017中手动增加它。有人能帮我吗?
编辑:这是完整的输出:
1>------生成开始:项目:Fractal,配置:调试Win32------
1>Main.cpp 1>'C:\Program Files(x86)\Microsoft Visual 中的内部编译器错误
Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\CL.exe’
1>请在Visual C++1上选择"技术支持"命令>
帮助菜单,或打开技术支持帮助文件以了解更多
信息1>C: \Program Files(x86)\Microsoft Visual
Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft。CppCommon.目标(360,5):
错误MSB6006:";CL.exe";退出,代码为2。1>完成建筑项目
"Fractal.vcxproj"——失败。
==========生成:0成功,1失败,0最新,0跳过==========
new int[N] { 0 }
并不意味着">用零填充数组",它实际上意味着聚合通过将第一个元素设置为0来初始化数组,并对其余元素进行值初始化(将其余元素设置为零)。例如,如果您编写了{ 1 }
,则会将第一个元素设置为1
,但其余元素仍然是0
。
由于您已经依赖于值初始化,您还可以从{0}
中删除0
,这也会使您的代码编译:
std::unique_ptr<int[]> fractal(new int[WIDTH*HEIGHT] {});
至于为什么您的原始代码没有编译,这显然是Visual Studio 2017中的一个错误。请随时报告。
这里有一个最小的应用程序来重现这个问题:
int main()
{
auto test = new int[200000]{1};
delete[] test;
}
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- NMAKE:致命错误 U1077:cl.exe 和 nmake.exe 返回代码'0x2'
- visual MSVC cl.exe尝试使用C++标头范例(定义与声明)
- cl.exe在哪里?(MS 构建工具 '13)
- 如何在 Azure 应用服务中使用 cl.exe 编译 C++ 代码并生成可执行文件
- Visual Studio not finding cl.exe
- Visual Studio 2017 无法找到 cl.exe
- CMake 和 Visual Studio 2015 - C 编译器 cl.exe 无法编译简单的测试程序
- cmake:生成批处理文件调用cl.exe
- 安装生成工具后找不到Visual Studio代码MSVC cl.exe
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 如何修复使用代码 2 退出"CL.exe"
- Vscode C++调试使用 cl.exe 和 / 链接构建的代码.exe - 调试器不附加
- CL.EXE无法编译简单的测试程序VS2017
- 区分 32 位和 cl.exe 生成的 64 位 PE 对象文件(Visual Studio C++)
- Visual Studio 2017 - 错误 MSB6006:"CL.exe" 退出代码 2
- 使用不同工具集使用Cl.EXE编译
- 如何解决错误PRJ0002:错误结果 -1073741515从"cl.exe"返回?
- 使用哪个版本的 cl.exe
- 如何在Visual Studio 2010中捕获cl.exe命令行