2016-11-27 3 views
1

J'essaye d'implémenter l'algorithme de remplissage d'inondation pour le tableau 2d de caractères. Le problème est que lorsque j'essaie de l'exécuter, j'obtiens une erreur de segmentation. J'ai essayé plusieurs choses mais je ne peux pas comprendre quel est le problème.Erreur de segmentation en essayant d'implémenter le remplissage d'inondation

Je suis en train avec cette entrée: http://pastebin.com/raw/puexQfXY

Capture d'écran d'erreur: https://gyazo.com/b7e738d1d4f09a5d71a020b34a1e3b6c

#include <stdio.h> 
#include <stdlib.h> 

void floodFill(int width, int height, char grid[width][height], char replacement, char target, int x, int y) 
{ 
    if(x < 0 || x >= width || y < 0 || y >= height) 
    {//check if out of array 
     return; 
    } 
    if(grid[x][y] != target) 
    {//check if on other than the target 
     return; 
    } 
    grid[x][y] = replacement; //replace 
    floodFill(grid, width, height, replacement, target, x + 1, y);//right 
    floodFill(grid, width, height, replacement, target, x, y + 1);//down 
    floodFill(grid, width, height, replacement, target, x - 1, y);//left 
    floodFill(grid, width, height, replacement, target, x, y - 1);//up 

} 

int main() 
{ 
    int width, height; 
    scanf("%d", &width); 
    scanf("%d", &height); 
    char grid[width][height]; 
    for(int y = 0; y < height; y++) 
    { 
     getchar();//absorb newline 
     for(int x = 0; x < width; x++) 
     { 
      grid[x][y] = getchar(); 
     } 
    } 

    floodFill(width, height, grid, 'O', '.', 2, 1); 
    for(int y = 0; y < height; y++) 
    {//print array 
     for(int x = 0; x < width; x++) 
     { 
      putchar(grid[x][y]); 
     } 
     putchar('\n'); 
    } 
} 
+1

Votre compilateur ne devrait même pas compiler cela. Hmm, essayé et il compile avec 8 avertissements. Si vous ne voyez pas les avertissements, essayez à nouveau avec '-Wall' pour gcc, clang ou'/W4' pour microsoft. – user3386109

+0

A côté: soit déplacez 'getchar' sur quelques lignes pour être à l'intérieur de la boucle, soit videz et utilisez' scanf ("% c", & grid [x] [y]); '(notez l'espace qui occupe les espaces blancs) . –

+0

et quelle est la raison derrière cela? Non, je ne comprends pas pourquoi faire ça parce que ça fonctionne maintenant –

Répondre

2

erreur que vous avez est fait est tout en appelant la fonction dans la fonction elle-même. Il suffit de prendre Lokk à des paramètres et essayer de les faire correspondre avec la fonction protoype de la

Votre code

floodFill(grid, width, height, replacement, target, x + 1, y);//right 
floodFill(grid, width, height, replacement, target, x, y + 1);//down 
floodFill(grid, width, height, replacement, target, x - 1, y);//left 
floodFill(grid, width, height, replacement, target, x, y - 1);//up 

Il devrait être

floodFill(width, height,grid, replacement, target, x + 1, y);//right 
floodFill(width, height,grid, replacement, target, x, y + 1);//down 
floodFill(width, height,grid, replacement, target, x - 1, y);//left 
floodFill(width, height,grid, replacement, target, x, y - 1);//u 
+0

TYSM, je tunnelais tellement sur d'autres choses dans mon programme ne réalisant pas cette erreur évidente. ça aide tellement quand quelqu'un d'autre regarde le code –