转移分配的内存

时间:2016-12-09 13:36:23

标签: c realloc

我有这段代码:

int items = 2;
int *array = malloc(items * sizeof(int));
array[0] = 1;
array[1] = 2;

我想弹出第一个项目并从左侧移动分配的内存来执行:

array[0] == 2

可能需要获取数组的地址并将其转移到 poped_items * sizeof(int) 或类似的东西?什么应该是第一个realloc论点?

1 个答案:

答案 0 :(得分:1)

如果您需要删除左侧的项目(仅使用&array[ItemsToShift]而不是简单的array是不够的),请不要realloc,只需{{1 }}:

memmove

如果需要,可以将其设为通用宏类型:

memmove(&array[0], &array[1], (items-(&array[1]-array[0]))*sizeof(int));

您可以在#define DARRAY_shift(Array, Size, Nshift) \ memmove(&array[0], \ &array[Nshift], \ (Size-(&array[Nshift]-&array[0]))*sizeof(Array[0]) \ ); 之后realloc

memmove

但这可能会浪费周期,因为你可以忽略轮班创建的动态数组末尾的差距。