2014-11-26 5 views
-2

나는 다음 학기에 스킬을 연습하기 위해 스도쿠 해결사를 쓰고 있습니다. 그것을 실행하려고하면 세그먼트 오류가 발생합니다. GDB를 사용하여, 나는이 코드를 함수로 추적 :스도쿠 솔버의 Segfault

vector<int> sudoku::valid_set(int row, int col) 
{ 
    vector<int> valids; 
    valids.push_back(0); 

    int rows[9] = {0}, 
     cols[9] = {0}, 
     Grid[9] = {0}; 

    for (int i = 0; i < 9; i++) 
    { 
     if (i != col) 
     // we don't want to test the input cell because this 
     // will cause an incorect return 
      rows[grid[row][i] - 1]++; 
    } 
    for (int i = 0; i < 9; i++) 
    { 
     // make sure current cell is not 0 
     if (i != row) //we dont' want to test the input cell 
      cols[grid[i][col] - 1]++; 
    } 
    // do the same steps for the mini grid using integer division 
    for (int i = row/3 * 3; i < row/3 * 4; i++) 
    { 
     for (int j = col/3 * 3; i < col/3 * 4; i++) 
     { 
      if (i != row && j != col) 
       Grid[grid[i][j] - 1]++; 
     } 
    } 
    // using the three arrays, find out what 
    // values need to go into the valids vector. 
    for (int i = 0; i < 9; i++) 
    { 
     if (rows[i] == 0 && cols[i] == 0 && Grid[i] == 0) 
     { 
      int val = i + 1; 
      valids.push_back(val); 
     } 
    } 
    return valids; 
} 

는 구체적으로 나는 오류가 라인 valids.push_back(val)에서 발생 생각하지만 난 내 인생에 대한 이유를 알아낼 수 없습니다. 어쩌면 나는 뻔뻔스럽게 명백한 것을 놓치고 있을지 모르지만 나는 모른다. 아무도 약간의 지침을 제공 할 수 있습니까? 당신이 당신의 배열에 경계 검사를 수행 몇 가지 여분의 코드에서 혜택을 누릴 수처럼

+2

초기 루프에서 'grid [row] [i] == 0'. 그러므로'rows'에 대한 인덱스는 배열의 경계를 벗어나는'rows [0 - 1]'이됩니다. –

+0

'그리드 '란 무엇입니까? 'Grid [grid [i] [j] -1 ++] 행에 강조 표시된대로'Grid'와의 차이점을 주목하십시오. 일부 전역 정적 개체를 가정합니까? – chrisb2244

+0

오, 채워지지 않은 셀은 0의 값을 가지므로 1을 빼기 때문에! – gsoble

답변

1

가 보이는 :

for (int i = 0; i < 9; i++) 
    { 
     if (i != col) 
     { 
      if (row >= MAXIMIM_ROWS) 
       throw An_Error(); 
      int rows_index = grid[row][i]; 
      if (rows_index <= 0) 
       throw Convulsions(); 

     // we don't want to test the input cell because this 
     // will cause an incorect return 
      rows[grid[row][i] - 1]++; 
    } 
함수에 매개 변수, 특히 인덱스 값을 포함 할 수있다 특히 때문에 당신은 당신의 자신의 오류 처리에 넣어해야

배열 범위를 벗어납니다.

+0

고마워요. 이것은 내 문제를 해결하는 데 도움이되었습니다! – gsoble