title: Stack Around variable was corrupt. What Does this mean?
body: <p>I have an application that appears to be executing all the code Ive given it, but still prompting an error "Run Time Check Error 2 - stack around 'val' was corrupted." I have read this could be because it is getting an assignment out of its bounds, but I checked all inputs and they are all valid.</p>
  
  <p>Im curious on what else could cause this?</p>
  
  <p>I feel the culprit could be in a number of places. ExtractVals method is where ive started, and Ive added a printf to test the indexes and all seems to check out. No out of bounds calls. This method does reassign values to each element of the array depending on the string inputted to the method (Its a tolkenizer method). Maybe this could be causing the error?</p>
  
  <p>Any tips would be great.</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;gl/glut.h&gt;
  #include &lt;gl/gl.h&gt;
  #include &lt;gl/glu.h&gt;
  #include &lt;string.h&gt;
  #include &lt;ctype.h&gt;
  
  
  void makeLower(char *input);
  void extractVals(char *cmd, float *val);
  
  FILE *file;
  int g_mainWindow = -1;
  float g_lightPos[] = {1, 1, -1, 0};
  char commands [50][50];
  int fileSize = -1;
  int objectdrawn = 0;
  
  int testint = 0;
  
  void display()
  {
      int i;
      char cmdTok[10] , *cmd = cmdTok;
      float val[5];
      char commandCpy[10];
  
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glLoadIdentity();
  
      if ( objectdrawn == 0){
  
          for(i = 0 ; i &lt;= fileSize ; i++){
              strcpy(commandCpy, commands[i]);
              printf("command = %s\n", commands[i]);
              cmd = strtok(commandCpy, " \n\0");
              printf("command = %s\n", commands[i]);
              switch(*cmd){
              case 'g'://translate object
                  extractVals(cmd , val);
                  glTranslatef(val[0] , val[1] , val[2]);
                  break;
              case 's'://scales an object
                  extractVals(cmd , val);
                  if (val[4] == 1.){
                      glScalef(val[0],val[0],val[0]);
                  }
                  else if (val[4] == 3.){
                      glScalef(val[0] , val[1] , val [2]);
                  }
                  break;
              case 'r'://rotates an object
                  break;
              case 'c'://this can call draw cone , cube, or change colors.
                  if(strcmp(cmd , "cone") == 0){
                      //printf("drawing a cone\n");
                      glColor3f(1,0,0);
                      glutSolidCone(.5 , 1 , 8, 1);
                  } else if (strcmp(cmd , "cube") == 0){
                      //glutSolidCube(1);
                  } else if (*cmd == 'c'){
                      extractVals(cmd , val);
                      glColor3f(val[0] , val[1], val[2]);
                  }
                  break;
              case 't'://draw a torus or tea pot
                  break;
              case 'o'://reads a meshfile
                  break;
              case 'f'://save current frame buffer.
                  break;
              case 'm':
                  break;
              }
  
          }
  
          objectdrawn = 1;
          i = -1;
          printf("Loop Done!");
      }
  
  
  
      glFlush();
      glutSwapBuffers();
  }
  
  void reshape(int w, int h)
  {
      float aspect = w / (float)h;
  
      glViewport(0,0,w,h);
      glMatrixMode(GL_PROJECTION_MATRIX);
      glLoadIdentity();
      glOrtho(-aspect, aspect, -1, 1, -1, 1);
      glMatrixMode(GL_MODELVIEW_MATRIX);
  }
  
  void idle()
  {   
      /* parse a command from file */
      /* store the data for later draw */
      char linebyline [50], *lineStr = linebyline;
      int i=0;
  
      while(!feof(file) &amp;&amp; file != NULL){
          fgets(lineStr , 50, file);
          makeLower(lineStr);
          strcpy(commands[i] , lineStr);
          printf("lineStr = %s\n", lineStr);
          printf("command = %s\n", commands[i]);
          fileSize = i;
          i++;
  
      }
  
  
      glutSetWindow(g_mainWindow);
      glutPostRedisplay();
  }
  
  void makeLower(char *input)
  {
      while (*input != '\0')
      {
          *input = tolower(*input);
          input++;
      }
  }
  
  /*
  Using a tolenizer this extracts out values needed for other functions to draw.
  */
  void extractVals(char *cmd, float *val){
      int i=0;
      cmd = strtok(NULL, " ,");
      while(cmd != NULL){
          val[i] = atof(cmd);
          printf("val[%d] is %s\n", i , cmd);
          cmd = strtok(NULL, " ,");
          i++;
          testint++;
          printf("Ran this method %d times with a index of %d\n", testint, i);
      }
  
      //printf("Extracted values %f %f %f\n", val[0] , val[1] , val[2]);
  
      val[4] = i--;
  }
  
  
  int main(int argc, char **argv)
  {
      file = fopen(argv[1], "r");
  
      glutInit(&amp;argc, argv);
  
      glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH);
      g_mainWindow = glutCreateWindow("Hello, glut");
      glClearColor(0.5, 0.5, 0.5, 0);
      glEnable(GL_LIGHTING);
      glEnable(GL_LIGHT0);
      glEnable(GL_DEPTH_TEST);
      glLightfv(GL_LIGHT0, GL_POSITION, g_lightPos);
  
      glutDisplayFunc(display);
      glutReshapeFunc(reshape);
      glutIdleFunc(idle);
  
      glutMainLoop();
      fclose(file);
  }
  </code></pre>
  
  <p>Outputs for Vals</p>
  
  <pre><code>val[0] is 0
  val[1] is 0.5
  val[2] is 0
  
  val[0] is 0.25
  
  val[0] is 1
  val[1] is 1
  val[2] is 1
  
  val[0] is 4
  
  val[0] is 0
  val[1] is -0.5
  val[2] is 0
  
  val[0] is 1
  val[1] is 1
  val[2] is 4
  
  val[0] is 1
  val[1] is 1
  val[2] is 0
  </code></pre>