在全局范围内声明动态大小的数组

Lem*_*bon 2 c size malloc dynamic

我不经常使用C,所以遇到了一个可能简单的问题。我有几个函数,需要访问一个全局数组变量g。但是,此变量的实际大小必须在init()-function中定义。大小取决于其他内容,因此g必须以动态大小声明。我阅读了malloc和其他功能,但不确定如何正确使用它们。

例:

double g[dynamic]; // size is not known yet
int n;

void init()
{
   // calculate "n" for array size
   n = ...
   // declare and initialze g with a size "n"
}

void dostuff()
{
   for (int i = 0; i < n; i++)
      work(g[i]);
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

pmg*_*pmg 5

您不能使用数组。您必须使用一个指针

double *global_array; // size is not known yet
size_t nglobal_array; // may be helpful to have the size

void init(void)
{
   // calculate "nglobal_array" for array size
   nglobal_array = 42;
   // declare and initialze global_array with a size "nglobal_array"
   global_array = malloc(nglobal_array * sizeof *global_array);
   if (global_array == NULL) {
       fprintf(stderr, "Error allocating resources.\nProgram aborted.\n");
       exit(EXIT_FAILURE);
   }
}

void dostuff()
{
   for (int i = 0; i < nglobal_array; i++)
      work(global_array[i]);
}
Run Code Online (Sandbox Code Playgroud)

不要忘记free(global_array)何时不再需要它。

完整的用法将是这样的

#include <stdlib.h>
// includes
// declarations & definitions as above
int main(void) {
    init();
    dostuff();
    free(global_array);
}
Run Code Online (Sandbox Code Playgroud)