使用realloc更改c中的数组大小

时间:2015-03-19 09:14:09

标签: c arrays realloc ansi-c

我在ansi-C中遇到了问题。我试图在数组上用C做堆栈。但是我遇到了pop和push函数的问题 - 我不知道如何改变数组的大小。我想我可以用某种方式使用函数realloc(),但我不知道如何。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

以下是一个示例代码:

#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,并保持容量(阵列可容纳的最大元件数)以及其当前大小。通常,库从不收缩数组,但如果需要更多空间则扩展它。