1

我实际上正在使用 C 语言进行分配,并且为了实现我的需要,我需要使用静态数组,比方说

static int array[LEN];

诀窍是这个数组长度 ,LEN是在main(). 例如

static int LEN;

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

static int array[LEN];

Where 在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

先感谢您!

4

2 回答 2

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;
于 2013-04-08T15:10:12.000 回答
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);
   }
}

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

于 2013-04-08T15:12:53.170 回答