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');
}
}
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
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) . –
et quelle est la raison derrière cela? Non, je ne comprends pas pourquoi faire ça parce que ça fonctionne maintenant –