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