c - 移位分配的内存

标签 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 参数应该是什么?

最佳答案

如果您需要删除左侧的项目(并且仅使用 &array[ItemsToShift] 而不是普通的 array 是不够的),请不要 realloc,只是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]) \
           );

您可以在memmove之后进行realloc:

new_array = realloc(array, (Size-Nshift)*sizeof(array[0]));

但这可能会浪费周期,因为您可以忽略由移位创建的动态数组末尾的间隙。

关于c - 移位分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41061722/

相关文章:

检查子进程的状态

无法在 char 指针数组中打印指针地址

c - realloc 在 vi​​sual studio 中失败,但可以使用 gcc (ntdll.dll)

c - 如何创建字符串数组的锯齿状数组

c - printf 中不存在扫描的 0

c - 如何使二维排列的参数在函数中使用

C - snprintf 之后不输出

如果我将 argc/argv 放入主函数而不使用它们,c 程序将失败

c - 如何重新分配一些使用 calloc 分配的内存?

c - 第二次调用后重新分配失败