0

以下代码执行后 q 的值是多少?m' 从字节 2 开始存储在内存中,内存没有问题。

int m = 44;
int* p = &m;
int n = (*p)++;
int* q = p - 1;
++*q;

当我在 gcc 上执行此代码时,代码将 q 指向的内存初始化为 1606417464,然后最后一行将其更改为 1606417465。这对我来说很有意义,因为该内存块尚未分配值。

当我使用 xtools 在我的 mac 上执行此代码时,q 指向的内存被初始化为零,然后在 ++*q 之后变为 1。知道为什么会发生这种行为吗?

4

1 回答 1

0

当您尝试修改时,您的代码会调用未定义的行为*q(如 中所示++*q)。

int m = 44; // Let's 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.
于 2013-10-05T22:38:04.720 回答