我有下面的代碼重寫引用內存:由一個的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
點。但是,該內存位置現在實際上包含之前由於memmove
而導致的x[1]
中的數據。
看看如何使用此代碼,看起來a
實際上應該指向之前在x[0]
上的值。我的問題是,如果a
如果內存位置現在已被x[1]
中的內容替換,那麼如何包含該先前的值?
你在'a'中拷貝了'X [0]'拷貝0 [0]用來指向 – Jasen
你的理解(或你的措辭)是錯誤的。 'a'指向存儲在'x [0]中的任何地址'值向下移動一個與'a'無關並且不相關。有*兩份*該地址的副本;在換班前,一個在'a'和一個在'x [0]'中。之後,有一個(在'a'中)。 – WhozCraig
@WhozCraig'memmove(&x [0],&x [1],sizeof(int *)* 3);'看起來不錯,我認爲這會導致未定義的行爲,因爲它們是兩個不同的指針, sizeof(int *)* 3'它應該是'sizeof(int)* 3'? – Gopi