int *p=(int*)0x6778;
Для этого адресное местоположение 0x6778
должно быть на первом месте действительным адресом.
Адресное пространство выделяется для каждого процесса, Ваша программа запускается в определенном процессе, еслипрограмма пытается получить доступ к адресу за пределами своего адресного пространства, после чего происходит сбой.Кажется, что происходит в вашем случае.
Если вы не уверены, что местоположение виртуального адреса является допустимым для использования вашей программой НЕ доступ к адресам явно , пусть компилятор помещает типы вадресное пространство выделено вашему процессу и верните его вам.Для этого проще всего использовать локальные переменные с автоматическим хранением или использовать malloc
для динамического распределения.