【问题标题】:Can I realloc from a position of the array?我可以从数组的位置重新分配吗?
【发布时间】:2017-09-02 21:34:43
【问题描述】:

假设我声明了array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。后来我希望它是array[8] = {2, 3, 4, 5, 6, 7, 8, 9}

忽略前 2 个元素。所以它将从array[2] 开始。将 array 重新分配到 array[2]

我试过了:

int *array=(int*)malloc(10*sizeof(int));
...//do stuffs
array=(int*)realloc(array[2],8*sizeof(int));

没有用。既不使用&array[2], *array[2],也不创建辅助数组,将Array重新分配给AuxArr而不是free(AuxArr)。

我可以拿灯吗?

【问题讨论】:

    标签: c arrays pointers realloc


    【解决方案1】:

    您只能重新分配指向已分配内存块的指针。因此,您可以重新分配(数组),但不能重新分配数组 [2],因为它是指向内存块中间位置的指针。

    您可能想改用memmove

    编辑:响应ThingyWotsit的评论,在将您想要的数据移到数组的前面之后,您可以重新分配以丢弃尾端。

    【讨论】:

    • 内存移动!之前应该考虑过,谢谢
    • 这个问题没有很好地说明。长度。 memmove 原始数组将给出:{2, 3, 4, 5, 6, 7, 8, 9, 9, 9}
    【解决方案2】:

    只需使用array += 2array = &array[2]。你不能realloc()它。

    【讨论】:

    • 哪个编译器扩展名是 C 中的左值数组的名称?
    • 他正在使用一个动态分配的数组,它只是一个指针,超出了malloc()ed的更多空间。
    • 你是对的。 array[10] 部分让我分心了。
    猜你喜欢
    • 2019-10-11
    • 2018-07-30
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    相关资源
    最近更新 更多