Sudoku Solver - segmentation fault

’ ’ ’
#include
using namespace std;

bool can_place(int mat[9][9], int num, int i, int j){

for(int k=0; k<9; i++){
    if(mat[k][j] == num || mat[i][k] == num) return false;
}

int r = (i/3)*3;
int c = (j/3)*3;

for(int k=r; k<r+3; k++){
    for(int l=c; l<c+3; l++){
        if (mat[k][l] == num) return false;
    }
}
return true;

}

bool solve(int mat[9][9], int i, int j){

if (i == 9) return true;
if (j == 9) return solve(mat, i+1, 0);

if(mat[i][j] == 0){
    for(int num = 1;num < 10; num++){
        if(can_place(mat, num, i, j)){
            mat[i][j] = num;
            if (solve(mat, i, j+1)) return true;
            mat[i][j] = 0;
        }
    }
    return false;
}
else return solve(mat, i, j+1);

}

int main(){

int n; cin>>n;
int mat[9][9];
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
        cin>>mat[i][j];
    }
}

if (solve(mat, 0, 0)){
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cout<<mat[i][j]<<" ";
        }
        cout<<endl;
    }
}
else cout<<"-1";

return 0;

}
’ ’ ’

this code is giving me segmentation fault and is getting dumped. I am not able to understand this. please help.