2015-03-12 4 views
-4

Я делаю простую командную игру Candy Crush. Это мой код ниже. Я пишу его в xCode, затем запускаю его в Terminal с помощью pico. Игровое поле правильно напечатано, но оно не помещает Xs на доску. Вместо этого плата печатается, а затем возникает ошибка сегментации.Ошибка сегментации: 11 C

// 
// Assignment 3 
// 

#include <stdio.h>`enter code here` 

//function headers 
void displayOriginal (int img[10][10], int col, int row); 

void removeOriginal (int img[10][10], int col, int row); 

int main(){ 
    //declare variables and array 
    int col = 0; 
    int row = 0; 
    int img[10][10]; 

    //call functions 
    displayOriginal (img, col,row);  
    removeOriginal (img, col, row);   
    displayOriginal (img,col,row); 

    return 0; 
} 

    //function for displaying gameboard 
void displayOriginal (int img[10][10], int col, int row){ 
    for(row = 0; row < 10; row++){//to create rows 0-9 
    for(col = 0; col < 10; col++){//to create columns 0-9 
     scanf("%d", &img[row][col]); 
    } 
    } 
    printf(" 0 1 2 3 4 5 6 7 8 9\n");//adds labels to x axis 

    for(row = 0; row < 10; row++){ 
    printf("%d", row);//add labels to y axis 

    for(col = 0; col < 10; col++){     
     if (img[row][col] == 1){ //red 
     printf("\x1b[41m "); 
     } else if (img[row][col] == 2){//green 
     printf("\x1b[42m "); 
     } else if (img[row][col] == 3){//purple 
     printf("\x1b[43m "); 
     } else if (img[row][col] == 4){//blue 
     printf("\x1b[44m "); 
     } else if (img[row][col] == 5){//magenta 
     printf("\x1b[45m "); 
     } else if (img[row][col] == 0){ 
     printf("XX"); 
     } 
     printf("\x1b[m"); //white 
    } 
    printf("\n");    
    } 
} 

//function to label where the X's go 
void removeOriginal (int img[10][10], int col, int row){ 
    //variables 
    int previous = -10; 
    int temp; 
    int tally = 1; 

    for(row = 0; row < 10; row++){ 
    for(col = 0; col < 10; col++){ 
     if (previous == img[row][col]){//if previous block =current then add 1 
     tally++; 
     } else { 
     tally = 1;//return to 1 if previous does not equal current 
     } 

     if (tally >= 3){ 
     previous = img[row][col]; 
     for (temp = (tally-1); temp >= 0; temp--){ 
      img [row-temp][col] = 0; 
     } 
     } else { 
     previous = img [row][col]; 
     } 
     printf("Row %d Col %d Tally %d", row, col, tally); 
    } 
    } 
} 
+3

Какое уникальное название ... – avim

+2

Добро пожаловать в переполнение стека. Пожалуйста, прочитайте это перед публикацией вопросов: http://stackoverflow.com/help/how-to-ask – tsnorri

+2

Вы должны использовать отладчик для запуска вашей программы, чтобы получить, где происходит ошибка сегментации (и другая полезная информация, такая как значения переменных) – mpromonet

ответ

0

Вы уверены, что row> = temp в этом разделе? Если это не так, img [-1] [col] приведет к ошибке сегментации.

if (tally >= 3) 
      { 
       previous = img[row][col]; 
       for (temp = (tally-1); temp >= 0; temp--) 
       { 
        img [row-temp][col] = 0; 
       } 
      } 
+0

> Я запустил код, и я все еще получил ошибку seg. Это то, к чему я изменил его: if (tally> = 3) { previous = img [-1] [col]; для (temp = (tally-1); temp> = 0; temp--) { img [row-temp] [col] = 0; } } – jackfrost123

+0

Почему? Ваш массив имеет размер 10. Так что img [1], img [2] ... img [9] будет работать. Все, что находится за пределами этого диапазона, приведет к ошибке сегментации. – sapensadler

+0

Я имел в виду img [0], img [1] ... img [9] – sapensadler