2016-11-27 4 views
1

2 차원 배열의 홍수 채우기 알고리즘을 구현하려고합니다.홍수 채우기 구현을 시도하는 분할 오류

문제점은 세그먼트 화 오류가 발생하여 실행하려고 할 때입니다. 여러 가지를 시도했지만 문제가 무엇인지 파악할 수 없습니다.

것은 나는이 입력을하려고 해요 : 오류의 http://pastebin.com/raw/puexQfXY

스크린 샷 : 함수 자체 내부의 함수를 호출하는 동안 수행해야 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

당신의 컴파일러는 심지어 컴파일해서는 안된다. 흠, 그것을 시도하고 그것은 8 경고와 컴파일합니다. 경고가 표시되지 않으면 gcc의 경우 -Wall, Microsoft의 경우 clang 또는'/ W4 '로 다시 시도하십시오. – user3386109

+0

다음과 같이'getchar'을 몇 줄 아래로 이동하여 루프 안에 넣거나'dumpf '를 덤프하고'scanf ("% c", & grid [x] [y]);'(선행 공백을 소비하는 공간에주의하십시오) . –

+0

그 이유는 무엇입니까? offece가 없다. 왜 지금은 작동하는지 이해하지 못한다. –

답변

2

실수입니다. 그냥해야 매개 변수에 lokk을하고 함수

귀하의 코드

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 

의의 프로토 타입으로 그들을 일치하려고

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,이 명백한 실수를 깨닫지 못하는 내 프로그램에서 다른 것들을 너무 터널링하고 있었다. 다른 사람이 코드를 볼 때 도움이된다. –