I have been working staring at this code for the past couple of hours trying to locate the Segmentation Fault but to no avail. Any help would be unfathomably appreciated.

Code:
 #include<stdio.h>#define ARRAYSIZE 7
#define STACKSIZE 8


static int stack[STACKSIZE];
static int operators[ARRAYSIZE];
void printInt();
int readOperators();
int readInts();
int evaluate();


main(int argc, char*argv[]){
  int numInts, numExpectedOperators, numOperators, maxInts, solution;
  maxInts = 8;
  printf("Made it to main");
  numInts =  readInts(stack, maxInts ,argv, argc);
  numExpectedOperators = numInts-1;
  numOperators =  readOperators(operators, numExpectedOperators, argv, argc, numInts);
  if(numInts != -1 ||  numOperators != -1){
    return 0;
  }
  else{
   solution = evaluate(stack, operators, numInts);
   printInt(solution);
  }
}
      int readInts(int stack[], int maxInts, char*argv[], int argc){
    int currIntCount = 0;
    int i, tempInt, expectedInts;
    char temp;
    /*if the number of total arguments entered is even then that means there is a mismatch of integers and operators. B/c numOperators =  numInts-1 */
    if(argc%2 == 0){
      printf("Mismatch in number of integers and operators. Quitting");
      return -1;
    }
    expectedInts = (argc/2)+1;
    for(i=0; i< expectedInts; i++){
      temp = *argv[i];
      tempInt =  atoi(temp);
      if(tempInt == 0  &&  currIntCount != expectedInts){
        printf("Bad input character enountered. Quitting");
        return -1;
      }
      if(currIntCount <= expectedInts){
        stack[i]=tempInt;
        currIntCount++;
      }else{
        printf("Minimum of 1 integer needed. Maximum of 8 integers accepted. Quitting.");
        return -1;
      }
    }
        /*reverse the order so its in stack form */
        int t1, t2, i1, i2;
        i1 = currIntCount-1;
        i2 = 0;
        while(i1 > i2){
        t1 = stack[i1];
        t2 = stack[i2];
        stack[i2] = t1;
        stack[i1] = t2;
        i1--;
        i2++;
        }
        return currIntCount;
      }
      int readOperators(char operators[], int expectedNumOperations, char*argv[],int argc, int indexArgvOperator){
    int currOperatorCount = 0;
    int y;
    char temp2;
    for(y=indexArgvOperator; y<argc;y++){
       temp2 = *argv[y];
       if(atoi(temp2) == 0){
         if(temp2 == 'a'|| temp2 == 'm' || temp2 == 's' || temp2 == 'd'){
        operators[currOperatorCount]=temp2;
        currOperatorCount++;
         }
         else{
           printf("Bad input character encountered. Quitting.");
           return -1;
         }
       }else {
         printf("Bad input character encountered. Quitting.");
         return -1;
       }
    }
    if(currOperatorCount != expectedNumOperations){
      printf("Mismatch in number of integers and operators. Quitting.");
      return -1;
    }
    return currOperatorCount;
      }
      int evaluate(int stack[], char operators[], int numItemsInStack){
    int sCounter = 0;
    int oCounter = 0;
    int a1, secondNum, currOperator;
    a1 = stack[sCounter];
    numItemsInStack--;
    sCounter++;
    while(numItemsInStack > 0){
      secondNum = stack[sCounter];
      currOperator = operators[oCounter];
      oCounter++;
      sCounter++;
      numItemsInStack--;
      if(currOperator == 'a'){
        a1 = a1+secondNum;
      }
      else if(currOperator == 'm'){
        a1 = a1*secondNum;
      }
      else if(currOperator == 's'){
        a1 = a1-secondNum;
      }
      else if(currOperator == 'd'){
        a1 = a1/secondNum;
      }
      else{
        printf("Bad input character encountered. Quitting.");
        return -1;
    }
      return a1;
    }
      }
      void printInt(int intToPrint){
    printf("%d\n", intToPrint);
      }