C - 由变量定义的长度的静态数组

时间:2013-04-08 15:08:50

标签: c arrays variables initialization

我实际上正在使用C语言进行分配,为了实现我的需要,我需要使用一个静态数组,让我们说

static int array[LEN];

技巧是这个数组长度LEN是在main()中计算的。例如

static int LEN;

void initLen(int len) {
LEN = len;
}

static int array[LEN];

initLen中调用main,并使用用户提供的参数计算len

这个设计的问题是我收到了错误

threadpool.c:84: error: variably modified ‘isdone’ at file scope

错误是由于我们无法使用变量作为长度初始化静态数组。为了使它工作,我正在定义一个LEN_MAX并写

#define LEN_MAX 2400

static int array[LEN_MAX]

这个设计的问题是我暴露自己的缓冲区溢出和段错误:(

所以我想知道是否有一些优雅的方法来初始化一个长度为LEN的静态数组?

提前谢谢!

2 个答案:

答案 0 :(得分:6)

static int LEN;
static int* array = NULL;

int main( int argc, char** argv )
{
    LEN = someComputedValue;
    array = malloc( sizeof( int ) * LEN );
    memset( array, 0, sizeof( int ) * LEN );
    // You can do the above two lines of code in one shot with calloc()
    // array = calloc(LEN, sizeof(int));
    if (array == NULL)
    {
       printf("Memory error!\n");
       return -1;
    }
    ....
    // When you're done, free() the memory to avoid memory leaks
    free(array);
    array = NULL;

答案 1 :(得分:1)

我建议使用malloc

static int *array;

void initArray(int len) {
   if ((array = malloc(sizeof(int)*len)) != NULL) {
      printf("Allocated %d bytes of memory\n", sizeof(int)*len);
   } else {
      printf("Memory error! Could not allocate the %d bytes requested!\n", sizeof(int)*len);
   }
}

现在不要忘记在使用它之前初始化数组。