【问题标题】:changing size of array in c using realloc [duplicate]使用 realloc 在 c 中更改数组的大小 [重复]
【发布时间】:2015-03-19 09:14:08
【问题描述】:

我在 ansi-C 中遇到了问题。我正在尝试在 C 中的数组上创建堆栈。但是我遇到了函数 pop 和 push 的问题——我不知道如何更改数组的大小。我想我可以使用函数 realloc() 以某种方式实现它,但我不知道如何。

谁能帮忙?

【问题讨论】:

标签: c arrays realloc ansi-c


【解决方案1】:

这是一个示例代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int *array = NULL;
    array = malloc(5*sizeof(*array));
    if (array == NULL)
    {
        printf("Memory allocation error\n");
        exit(1);
    }
    /* Now array has 5 entries, from 0 to 4 */
    array[0] = array[1] = array[2] = array[3] = array[4] = 0;
    array = realloc(array, 10*sizeof(*array));
    if (array == NULL)
    {
        printf("Memory allocation error\n");
        exit(1);
    }
    /* Now array has 10 entries, from 0 to 9 */
    array[5] = array[6] = array[7] = array[8] = array[9] = 0;
    free(array);
    array = NULL;
}

请注意,您无法更改从堆栈或数据(或 bss)段分配的数组的大小。您需要使用 malloc() 动态分配数组,以便以后可以使用 realloc()。

考虑在您未来的实现中,每次将新数据推送到堆栈时调用 realloc() 效率太低了。传统的做法是通过至少将数组容量乘以 2 来扩展数组容量,并且除了当前大小之外还保留一个容量(数组可以容纳的最大元素数)。通常库从不缩小数组,而是在需要更多空间时扩展它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-03
    • 2012-10-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2018-06-13
    • 2014-04-09
    • 2017-07-03
    相关资源
    最近更新 更多