Каково значение q после выполнения следующего кода? m 'сохраняется в памяти, начиная с байта 2 и без проблем с памятью.
int m = 44;
int* p = &m;
int n = (*p)++;
int* q = p - 1;
++*q;
Когда я выполняю этот код на gcc, код инициализирует память, на которую указывает q, до 1606417464, а затем последняя строка меняет ее на 1606417465. Это имеет смысл для меня, поскольку этому блоку памяти не присвоено значение.
Когда я выполняю этот код на своем mac с помощью xtools, память, на которую указывает q, инициализируется как ноль, а затем изменяется на 1 после ++ * q. Любая идея, почему такое поведение происходит?
Ваш код вызывает неопределенное поведение при попытке изменить *q
(как в ++*q
).
int m = 44; // Let say &m is 1000.
int* p = &m; // p is 1000 now.
int n = (*p)++; // assigns 45 to 'n'.
// Now *p (which is 'm') becomes 45.
// Note p is not modified here but only *p is modified.
int* q = p - 1; // q is 996 or 1004 (depending on which side stack grows)
// and assumes sizeof(int*) == 4
// which may or may not a valid address and may not belong
// to your program.
++*q; // Here you are essentially modifying some random memory.