did you check if grid is not exceeded sometimes? if your monster is at 9,9 and you move it to 9,10 ? also have in mind other collisions (if monster is moving to field with other monster).
its hard to track error without knowing whole program structure
edited:
also see this problem:
if your loops are in 1,1. and your monster is there, moving to 1,2.
when loop continues, and come to 1,2 ,your monster (grid[][] == 'm') will move again (twice or more in the same function) :)
In the other version I wrote, I had bounds in place to keep monsters from running into one another and leaving the grid. I did not, however, think about the same monster being evaluated twice during the loop sequence. I think that might be it. I'll change it and post back my results. Thank you.
The same monster being evaluated more than once was the issue. I fixed it by moving the monsters to their new location on a different, temporary grid while the loop finished going through the rest of the main grid. Then, put the monsters back on the main grid in their new locations from the temp grid. Thank you very much.