1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Segmentation fault 11 help?

  1. Oct 13, 2012 #1
    1. The problem statement, all variables and given/known data

    when I am compiling my code I am getting a segmentation fault when entering in input but I don't know why?

    it prints Segmentation fault: 11



    2. Relevant equations



    3. The attempt at a solution

    This is my code I tried looking up what was causing it but couldn't find the reason please help

    Code (Text):

    void flipifneeded(int array[][MAX_SIZE], int posx, int posy, int turn){

        int x,y,i;
        int deltax = 0;
        int deltay = 0;
     
     
        //down

       while(turn == 1){

          for(deltax = -1; deltax< 2; deltax++){
             for(deltay = -1; deltay< 2; deltay++){

               // deltax = deltax + posx;
               // deltay = deltay + posy;

                if(array[deltax + posx][deltay + posy] == BLACK){
                   x = deltax + posx;
                   y = deltay + posy;

                   for(i = 0; i< 10000; i++){ x += deltax;
                      y += deltay;

                      if((x<0 || x >= MAX_SIZE || y < 0 || y>= MAX_SIZE) ||
                      (array[x][y] == EMPTY)) {
                         break;
                      }
                      if(array[x][y] == BLACK){
                         while((array[x-=deltax][y-=deltay] == WHITE)){
                            array[x][y] = BLACK;
                         }
                         break;

                      }
                   }
                }
             }
          }
       }
       while(turn == 2){

          for(deltax = -1; deltax< 2; deltax++){
             for(deltay = -1; deltay< 2; deltay++){

                if(array[deltay + posy][deltax + posx] == WHITE){
                   x = deltax + posx;
                   y = deltay + posy;

                   for(i = 0; i< 10000; i++){

                      x += deltax;
                      y += deltay;

                      if((x<0 || x >= MAX_SIZE || y < 0 || y>= MAX_SIZE) ||
                      (array[x][y] == EMPTY)) {
                         break;
                      }

                      if(array[x][y] == BLACK){
                         while(array[x-=deltax][y-=deltay] = WHITE){
                            array[x][y] = BLACK;

                           }
                         break;
                      }
                   }
                }
             }
          }
       }
    }
     
    and this is the function I call it from


    Code (Text):

    int playingame(int array[][MAX_SIZE],int turn){
      // char input[2];

       int posx=0;
       int posy=0;
       if((turn == 2)){

          printf("it is Black's turn to move\n");
       }

       else{

          printf("whites turn\n");
       }

       char letter=0;
       int number=0;
       printf("Enter your move: \n");
       letter = getchar();
       number = getchar();
       getchar();

       posy = letter -'a';
       posx = number - '0'-1;

       //int counti = i;
       //int countj = j;


       if((array[posx][posy] == CROSS && turn == 2)){
          printf("error\n");
          turn = 2;
       }
       else if((array[posx][posy] == CROSS && turn == 1)){
          printf("error\n");
          turn = 1;
       }
       if((array[posx][posy] == EMPTY && turn == 2 )){

     array[posx][posy] = BLACK;

          updateboard(array);
          flipifneeded(array,posx, posy, turn);
          turn = nexturn(array, turn);

       }
       else if((array[posx][posy] == EMPTY && turn == 1)){

          array[posx][posy] = WHITE;
          updateboard(array);
          flipifneeded(array, posx, posy, turn);
          turn = nexturn(array, turn);

       }
       

       return turn;
       }
     
    if someone could help me with this that would be great as I am in a bit of a hurry and can't proceed until I fix this issue.

    THANKS.!!
     
  2. jcsd
  3. Oct 13, 2012 #2

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    Code (Text):
                         while(array[x-=deltax][y-=deltay] = WHITE){
                            array[x][y] = BLACK;
                           }
    There are at least three things wrong here.
    • You aren't protecting against x and y going outside the bounds of the array.
    • You should have used == WHITE rather than = WHITE.
    • You don't have your compiler warnings set high enough; a good compiler will warn you about using = where it looks like you should have used ==.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook