Я хочу объявить указатель, чтобы он содержал пользовательский адрес, а затем присвоил ему значение:
void main()
{
char *ptr;
ptr = (char *)0x123123; //the assignment works perfectly with a cast
printf("%p\n", ptr); //and the pointer indeed holds the address it's supposed to
*ptr = 'a'; //but this breaks
puts("2");
}
Сначала я думал, что причина в том, что я пытаюсь разыменовать неинициализированную память.Но на самом деле я сомневаюсь, что это так, поскольку some_type *some_ptr = &some_variable;
работает безупречно, поэтому сделка должна быть адресом, которому я ее назначаю.
Тогда я подумал, точно так же 3
или 'a'
или "alpine"
- это константы, (char *) 0x123123
тоже должна быть константой.И const
-s нельзя редактировать в C, но это все равно не может быть, потому что попытка изменить значение const
не скомпилируется.
3-е допущение состоит в том, что такой адрес должен быть недоступен, но это также не имеет смысла, поскольку строка 4 работает всегда, независимо от того, какой адрес я даю, или типа pointer
. * 1016.*