在使用Visual Studio 2017构建项目时,我遇到了这个错误:
error 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 });
如果我注释掉那行代码(以及其他使用fractal变量的代码),程序就可以编译通过。如果我将unique pointer更改为普通的int数组,则代码可以编译,但调试时会抛出异常,表示栈溢出。
减小数组大小可以解决问题,因此看起来程序没有足够的内存空间运行。我谷歌了很多,发现Visual Studio默认将堆栈大小限制为1MB(可能我记错了),但我找不到如何在Visual Studio 2017中手动增加它的方法。有人可以帮帮我吗?
编辑:以下是完整输出:
1>------ 开始生成: 项目: Fractal, 配置: Debug 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'
中的 INTERNAL COMPILER ERROR
1> 请在 Visual C++ 帮助菜单上选择“技术支持”命令或打开技术支持帮助文件以获取更多信息
1>C:\Program Files (x86)\Microsoft Visual
Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(360,5):
错误 MSB6006: "CL.exe" 已退出,代码为 2。 1>已完成项目“Fractal.vcxproj”的生成 -- 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
unique_ptr<int[]>
而不是std::vector<int>
(或者std::array
,因为你的大小可以在编译时确定)。 - UnholySheep