1

プログラムの早い段階で配列に配置する必要がある約12000の既知の値があります。特定の状況を考えると、後でこの配列のサイズをreallocで変更する必要があります。配列をmalloc/callocで値で初期化する方法、または配列を他のいくつかの値で埋める方法はありますか?

4

2 に答える 2

4

この方法でed配列を初期化することはできませんmalloc。プログラムに静的に配置し、実行の開始時にed配列にコピーするのが最善の方法です。malloc例:

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));
}
于 2012-05-16T04:26:43.070 に答える
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のソリューションでは何も得られず、まったく不要な難読化が多数発生します。

于 2012-05-16T04:36:11.930 に答える