如何使用值初始化数组以便稍后在C中重新分配

时间:2012-05-16 04:24:37

标签: c data-structures

我有大约12000个预先知道的值,我需要在程序的早期放入数组中。鉴于某些情况,我稍后需要使用realloc调整此数组的大小。有没有办法用malloc / calloc用值初始化数组,或用其他几个值填充数组?

2 个答案:

答案 0 :(得分:4)

您不能以这种方式初始化malloc ed数组,最好的机会是在程序中静态地使用它,并在运行开始时将其复制到malloc ed数组,例如:

static int arr[] = {1,2,3,4};
static int * malloced_arr;

// in the init function
malloced_arr = malloc(sizeof(arr));
if (malloced_arr)
{
    memcpy(malloced_arr, arr, sizeof(arr));
}

答案 1 :(得分:1)

这是零长度数组有用的东西。例如:

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

struct values {
    int x[4];
    int y[0];
} V = { {1, 2, 3} };

int
main( int argc, char ** argv )
{
    int *t;
    int i;
    struct values *Y;

    (void) argc; (void) argv;
    /* Allocate space for 100 more items */
    Y = malloc( sizeof *Y + 100 * sizeof *Y->y );
    t = Y->x;
    memcpy( Y, &V, sizeof V );
    t[3] = 4;

    for( i = 0; i < 4; i++ )
        printf( "%d: %d\n", i, t[ i ]);

    return 0;
}

当然,这真的只是一个客厅技巧,在Binyamin的解决方案中没有任何好处,并引入了许多完全不必要的混淆。