引用被memmove覆盖的内存

时间:2015-01-11 06:52:21

标签: c memmove

我有以下代码:

int** x;

// Add 4 int pointers to x - code ommitted

// Pop the first element
int* a = x[0];
memmove(&x[0], &x[1], sizeof(int*) * 3);
x = realloc(x, sizeof(int*) * 3);

// Some code that uses 'a' - ommitted

根据我的理解,a现在指向第一个位置x。但是,由于x[1],该内存位置现在实际上包含之前在memmove上的数据。

看看如何使用此代码,似乎a实际上应该指向之前x[0]上的值。我的问题是,a如果该内存位置现在已被x[1]中的内容替换,那么如何包含该前一个值?

1 个答案:

答案 0 :(得分:2)

a是堆栈中的变量,在您更改(通过memmove)x[0]的值之前,您为其指定了值x[0]。因此,a将保留x [0]的值,并且数组x将原始x[1],x[2],x[3]存储在x[0],x[1],x[2]

所以基本上充当局部变量,它是x [0]处数据的副本。所述数据是一个整数指针,但可能是其他任何东西。