2017-10-14 31 views
3

は、私はこのエラーに出くわしたのVisual Studio 2017でのプロジェクトのビルドで終了しました:ここにのVisual Studio 2017 - エラーMSB6006: "cl.exeのは" コード2

error MSB6006: "CL.exe" exited with code 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配列に一意のポインタを変更すると、コードがコンパイルされますが、デバッグするときに例外がスローされ、スタックのオーバーフローが通知されます。

アレイのサイズを小さくすると問題が解決されるため、プログラムに十分なメモリスペースがないように見えます。私はかなりたくさんのグーグルでグーグルスタジオがスタックサイズをdeafult(私は間違っているかもしれません)で1MBに制限していますが、私はビジュアルスタジオ2017で手作業でそれを増やす方法を見つけることができません。

編集:ここに完全な出力です:

1>------ Build started: Project: Fractal, Configuration: Debug Win32 ------

1>Main.cpp 1>INTERNAL COMPILER ERROR in 'C:\Program Files (x86)\Microsoft Visual

Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\CL.exe'

1> Please choose the Technical Support command on the Visual C++ 1>

Help menu, or open the Technical Support help file for more

information 1>C:\Program Files (x86)\Microsoft Visual

Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(360,5):

error MSB6006: "CL.exe" exited with code 2. 1>Done building project

"Fractal.vcxproj" -- FAILED.

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

+0

:あなたの代わりに 'のstd ::ベクトル'(または 'STDの' unique_ptrを '使用している理由は、私は混乱している::あなたのサイズがコンパイル時定数になることができるので、「配列」を参照してください) – UnholySheep

+2

あなたが私たちに見せてくれるエラーの行は、もっとも有益です。質問の本文に*完全*と*完全*のエラーメッセージをコピーして貼り付けてください。 –

+0

完全なエラーメッセージで編集されました。私はまだ初心者ですし、私はコースに従っています、正直なところ、彼らはコースで使用されたので、私は一意のポインタを使用しました。私は今、ベクトルで試してみましたが、配列はこの例外をスローします: "Fractal.exeの0x01393089で未処理例外:0xC00000FD:スタックオーバーフロー(パラメータ:0x00000000、0x00482000)が発生しました。私は今混乱しています、ベクターはなぜ機能しますか? –

答えて

2

new int[N] { 0 }は「ゼロで配列を埋める」という意味ではありません、それは実際には、0への最初の要素を設定することにより、配列を集約初期化する意味残りの値を(残りは0に設定されます)の値を初期化します。たとえば、{ 1 }と書いた場合、最初の要素は1に設定されますが、残りはまだ0になります。

すでに値初期化に頼っているので、あなたにも偶然にも、あなたのコードのコンパイルを行っていること、{0}から0を削除する場合がありますあなたの元のコードはdoesnの理由として

std::unique_ptr<int[]> fractal(new int[WIDTH*HEIGHT] {}); 

コンパイルする - それは明らかにVisual Studio 2017のバグです。report itを自由に感じてください。ここで

は、問題を再現するために、最小限のアプリケーションです:オフトピック

int main() 
{ 
    auto test = new int[200000]{1}; 
    delete[] test; 
} 
関連する問題