Your infinite loop seems to be in the solve_game function (use the debugger to verify):
while (allocated_places != 81)
{
if (allocated_places == 41)
{
allocated_places = allocated_places; }
...
}
In the code marked by the ellipsis it is not guaranteed that allocated_places is increased. In that case you are entering an infinite loop. And the statement in the fifth line doesn't do anything. What were you trying to accomplish there?
Finding a solver algorithm on the Internet is not difficult: A google search with "Sudoku algorithm C++" delivered some 400.000 hits. For example:
https://en.wikipedia.org/wiki/Sudoku_solving_algorithms[
^]
For your progress in programming skills I think you need to work on two things: Learn more about C++ and learn to use the debugger. Without using a debugger you will not get really far.