title: 0xC0000005: Access violation reading location 0x00000008
body: <p>I have been struggling with this for a while and was wondering if anyone could help.  I am trying to make a particle sample using C++ and SDL1.3 and I have had great success up until this point.  The program compiles and the screen opens and nothing happens. When I run the debugger I get this error:  </p>
  
  <p>Unhandled exception at 0x0102414a in SDL 1.3 Space.exe: 0xC0000005: Access violation reading location 0x00000008.
  The program '[7272] SDL 1.3 Space.exe: Native' has exited with code -1073741819 (0xc0000005).</p>
  
  <p>and it points to this piece of the code:</p>
  
  <pre><code>bool particle::isDead()
  {
      return (SDL_GetTicks() &gt;= endTime || x == 0 || y == 0 || x == SDL_GetVideoSurface()-&gt;w -1 || y == SDL_GetVideoSurface()-&gt;h - 1);
  }
  </code></pre>
  
  <p>It would be greatly appreciated if someone would be so kind as to help me and /or point me in the right direction.</p>
  
  <p>This is the entire program:</p>
  
  <pre><code>#include "SDL.h"
  #include "common.h"
  #include &lt;stdio.h&gt;
  #include &lt;string&gt;
  #include &lt;cstdlib&gt;
  #include &lt;vector&gt;
  #include &lt;ctime&gt;
  
  /*static SDL_Texture *background = 0; //background
    SDL_Renderer *renderer;
  
  void render()
  {   
      SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
      SDL_RenderClear(renderer);
      SDL_RenderCopy(renderer, background, NULL, NULL); //Display background
      SDL_RenderPresent(renderer);
      endFrame = SDL_GetTicks();
  };*/ 
  
  class particle
  {
      float x, y, xvel, yvel;
      Uint32 endTime;
      Uint8 color;
  
      public:
          particle( float X, float Y, float Xvel, float Yvel, int life, Uint8 Color  );
          void move();
          void show();
          bool isDead();
  };
  
  particle::particle( float X, float Y, float Xvel, float Yvel, int life, Uint8 Color )
  {
      x = X;
      y = Y;
      xvel = Xvel;
      yvel = Yvel;
      endTime = SDL_GetTicks() + life;
      color = Color;
  }
  
  void particle::move()
  {
      x += xvel;
      y += yvel;
  
      if ( x &lt; 0 )
          x = 0;
  
      if ( y &lt; 0 )
          y = 0;
  
      if ( x &gt; SDL_GetVideoSurface() -&gt; w)
          x = SDL_GetVideoSurface()  -&gt; w - 1;
  
      if ( y &gt; SDL_GetVideoSurface() -&gt; h)
          y = SDL_GetVideoSurface()  -&gt; h -1;
  }
  
  void particle::show()
  {
      Uint8* pixels = (Uint8*) SDL_GetVideoSurface()-&gt;pixels;
      Uint8* pixel = pixels + (int) y * SDL_GetVideoSurface()-&gt;pitch + (int) x;
      *pixel = color;
  }
  
  bool particle::isDead()
  {
      return (SDL_GetTicks() &gt;= endTime || x == 0 || y == 0 || x == SDL_GetVideoSurface()-&gt;w -1 || y == SDL_GetVideoSurface()-&gt;h - 1);
  }
  
  class particleEngine
  {
      std::vector &lt;particle*&gt; particles;
      int x, y, maxparticle;
  
      public:
          particleEngine( int maxpart, int X, int Y );
          ~particleEngine();
          void refresh();
  };
  
  particleEngine::particleEngine( int maxpart, int X, int Y )
  {
      x = X;
      y = Y;
      maxparticle = maxpart;
      for ( int i = 0; i &lt; maxparticle; i++ )
          particles.push_back (new particle( x + rand()%6-3, y + rand()%6-3, rand()%10 + (float)rand()/(float)RAND_MAX - 5, rand()%10 + (float)rand()/(float)RAND_MAX - 5, 500 + rand()%1000, 0));
  }
  
  particleEngine::~particleEngine()
  {
      for ( int i = 0; i &lt; maxparticle; i++)
          delete particles[i];
  }
  
  void particleEngine::refresh()
  {
      for ( int i = 0; i &lt; maxparticle; i++)
      {
          if ( particles[i]-&gt;isDead())
          {
              delete particles[i];
              particles[i] = new particle( x + rand()%6-3, y + rand()%6-3, rand()%10 + (float)rand()/(float)RAND_MAX - 5, rand()%10 + (float)rand()/(float)RAND_MAX - 5, 500 + rand()%1000, 0);
          }
          else
          {
              particles[i]-&gt;move();
              particles[i]-&gt;show();
          }
      }
  }
  
  int main( int argc, char* argv[] )
  {
      bool running = true;
      const int FPS = 30;
      Uint32 startFrame;
      srand (time(0));
      particleEngine ps(1000, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
  
      SDL_Window *window;         /* main window */
      SDL_Renderer *renderer;
  
      if (SDL_Init(SDL_INIT_EVERYTHING)!= 0) 
      {
          printf("Could not initialize SDL");
      }
  
      window = SDL_CreateWindow("SDL 1.3 Particles", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT,
                              SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
      renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  
      // Body of the program goes here.
      while (running)
      {
          startFrame = SDL_GetTicks();
          SDL_Event event;
          //render();
          //While there's events to handle
          while( SDL_PollEvent( &amp;event ) )
          {
              //If the user has Xed out the window
              if (event.type == SDL_QUIT) 
          {
              running = false;
          }
      }
  
      //SDL_FillRect(renderer, &amp;renderer-&gt;clip_rect, SDL_MapRGB(renderer-&gt;format, 0x00,0x00, 0x00));
  
      ps.refresh();
      //SDL_RenderCopy(renderer, 0, 0, 0);
      SDL_RenderPresent(renderer);
      //SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
      //SDL_RenderClear(renderer);
  
      if (1000/FPS&gt;SDL_GetTicks()-startFrame)
          SDL_Delay(1000/FPS-(SDL_GetTicks()-startFrame));
  
  }
    SDL_Quit();
    return 0;
  }
  </code></pre>