I can point you in the right direction for you to figure out the cause of the problem...
You know the problem is with ChangeMenus but, you don't know why ChangedMenus is causing an A/V.
You should place a _hardware_ read/write breakpoint on the ChangeMenus variable. That will cause execution to break every time ChangeMenus changes. The first time is when it is allocated (I'm presuming it's a class), note the value of the pointer (it should remain unchanged throughout the program). Every time it changes, execution should break, that should eventually reveal the culprit that caused it to be invalid which caused the A/V.
HTH.