title: Confusing error in Game Of Life program
body: <p>I have some working Game of Life code.  It saves each population as a bitmap.  Here's what the output looks like (cropped):</p>
  
  <p><img src="https://i.stack.imgur.com/3e4k7.gif" alt="desired output"></p>
  
  <p>When cleaning the code, I found that if I commented out or otherwise remove line 60:</p>
  
  <pre><code>cout &lt;&lt; "Survivor: " &lt;&lt; x &lt;&lt; ", " &lt;&lt; y &lt;&lt; "\n";
  </code></pre>
  
  <p>It completely messes up the program, and instead of producing a glider like it should, it produces this:</p>
  
  <p><img src="https://i.stack.imgur.com/e6Nj8.gif" alt="faulty output"></p>
  
  <p>I have poked around, trying to find out what might cause this, but I have been thus far unsuccessful.  This is my current code: </p>
  
  <pre><code>//Bitmap Library from http://partow.net/programming/bitmap/
  #include "bitmap_image.hpp"
  #include &lt;iostream&gt;
  #include &lt;stdio.h&gt;
  #include &lt;string.h&gt;
  #include &lt;unistd.h&gt;
  
  using namespace std;
  
  #define WIDTH 160
  #define HEIGHT 128
  
  bool population[WIDTH][HEIGHT];
  bool survivors[WIDTH][HEIGHT];
  
  int check_survivors();
  int check_neighbors(int x, int y);
  int write_population(char* file);
  
  int main() {
      int i, populations;
  
      cout &lt;&lt; "Enter number of populations: ";
      cin &gt;&gt; populations;
  
      //Glider
      survivors[28][100] = true;
      survivors[29][100] = true;
      survivors[29][101] = true;
      survivors[30][101] = true;
      survivors[28][102] = true;
  
      //Initial image generation
      write_population("population0.bmp");
  
      //populations
      for (i = 0; i &lt; populations; i++) {
          char filename[17] = "population";
          char ii[3];
          sprintf(ii, "%d", i+1);
  
          strcat(filename, ii);
          strcat(filename, ".bmp");
  
          check_survivors();
          write_population(filename);
      }
  
      return 0;
  }
  
  int check_survivors() {
      //set x and y variables
      int x, y;
  
      for (x = 0; x &lt; WIDTH; x++) {
          for (y = 0; y &lt; HEIGHT; y++) {
              if (check_neighbors(x, y)) {
                  survivors[x][y] = true;
                  cout &lt;&lt; "Survivor: " &lt;&lt; x &lt;&lt; ", " &lt;&lt; y &lt;&lt; "\n";
              } else {
                  survivors[x][y] = false;
              }
          }
      }
      return 0;
  }
  
  int check_neighbors(int x, int y) {
      int neighbors = 0, survives;
  
      //I really need to rewrite this mess
  
      //Neighbors above
      if (population[x-1][y-1] == true &amp;&amp; x != 0 &amp;&amp; y != 0) {
          neighbors++;
      }
      if (population[x][y-1] == true &amp;&amp; y != 0) {
          neighbors++;
      }
      if (population[x+1][y-1] == true &amp;&amp; x != WIDTH-1 &amp;&amp; y != 0) {
          neighbors++;
      }
  
      //Neighbors next to
      if (population[x-1][y] == true &amp;&amp; x != 0 ) {
          neighbors++;
      }
      if (population[x+1][y] == true &amp;&amp; x != WIDTH-1) {
          neighbors++;
      }
  
      //Neighbors below
      if (population[x-1][y+1] == true &amp;&amp; x != 0  &amp;&amp; y != HEIGHT-1) {
          neighbors++;
      }
      if (population[x][y+1] == true &amp;&amp; y != HEIGHT-1) {
          neighbors++;
      }
      if (population[x+1][y+1] == true &amp;&amp; x != WIDTH-1 &amp;&amp; y != HEIGHT-1) {
          neighbors++;
      }
  
      //Determining life or death
      if (neighbors &lt; 2 || neighbors &gt; 3) {
          //Neighbors less than 2 or more than 3 is dead cell
          survives = 0; 
      } else if (neighbors == 3 &amp;&amp; population[x][y] == false) {
          //Exactly 3 neighbors re-animates a cell
          survives = 1;
      } else if (population[x][y] == true) {
          //2 or 3 neighbors is survivor
          survives = 1;
      }
  
      return survives;
  }
  
  int write_population(char* file) {
      //Create Image
      bitmap_image image(WIDTH, HEIGHT);
  
      //Set background to white
      image_drawer draw(image);
      image.set_all_channels(255,255,255);
  
      //set x and y variables
      int x, y;
  
      //For every array point, check to see if it survives,
      //and transfer survivors to population
      for (x = 0; x &lt; WIDTH; x++) {
          for (y = 0; y &lt; HEIGHT; y++) {
              if (survivors[x][y] == true) {
                  draw.pen_width(1);
                  draw.pen_color(0,0,0);
                  draw.plot_pixel(x, y);
              }
              population[x][y] = survivors[x][y];
          }
      }
  
      //Save image
      image.save_image(file);
  
      //return
      return 1;
  }
  </code></pre>