Congrats on your Sudoku program.
I don't see any advantage to using a structure for the board. I've written two versions of Sudoku solvers - one with a 2D board, and one with a 3D board (using the deeper boards to hold the "possibles" for each square). Both worked with the standard 9 x 9 game boards.
The 2D board was the better choice for speed (slightly), and my logic. I used an array of structs if "human" logic was unable to solve the puzzle, and trial and error was needed.
I never saw a need to malloc the board off the heap. The stack worked fine, and making the board array global, just made sense to me, since every function would need to access or modify it.
Although they are geeks to the core, you may want to check out the sudoku programmers forum, and the more active Sudoku players forum. I've lost the url in my last disk crash, but it's in Google. The regulars there, have forgotten more about programming for Sudoku, than you (and definitely more than I), are ever likely to learn in a lifetime.
Will you be changing your solving algorithm to better handle the larger board size?
In my programs, on a standard board, the human logic functons are fast, but the trial and error function usually does find the solution quickly, also. On a larger board, I would expect the trail and error function to take much longer.
Good luck, and I hope you'll report back how your program progresses.