Visual Studio 2017 - 错误 MSB6006:"CL.exe" 退出代码 2

Visual studio 2017 - error MSB6006: "CL.exe" exited with code 2

本文关键字:CL exe 代码 退出 2017 Studio 错误 MSB6006 Visual      更新时间:2023-10-16

使用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;
}