2015-03-19 80 views
0

我在ansi-C中遇到了问题。我试图在数组中使用C进行堆栈。但是我遇到了弹出和弹出功能的问题 - 我不知道如何改变数组的大小。我想我可以使用函数realloc(),但我不知道如何。使用realloc改变c中数组的大小

任何人都可以帮忙吗?

+6

如果这是C,为什么你在标题中标记了问题C#并使用了C#?他们是完全不同的语言。 – 2015-03-19 09:16:33

+1

你可以看看下面的链接: http://stackoverflow.com/questions/3827892/how-can-i-change-the-size-of-an-array-in-c – 2015-03-19 09:17:02

回答

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