如何在c中动态分配静态存储?

Old*_*ool 1 c static memory-management list dynamic

在一个递归方法来分组树的外部节点,我需要在该函数内动态分配内存.但是语句

static node* ext_node = malloc (sizeof(node)); 
Run Code Online (Sandbox Code Playgroud)

不起作用,编译器给出错误,其中说

初始化元素不是常量.

总之,我想问一下,static当动态获取指针指向的内存时,如何在递归调用中使用带有指针的关键字?

我需要这个,因为当需要在列表中添加更多元素时,该方法insert_to_end (node*)将负责为新节点分配存储,因此我可以创建list任何长度,这也是确切的内存要求.

但是如何用c语言实现这一目标呢?

Emp*_*ian 5

需要注意的是,一般使用static在递归函数是一个错误(并且也是线程安全的).通过参数将所需数据传递到函数中几乎总是更好.

但是,如果你坚持,你可以这样做:

static node* ext_node;
if (ext_node == NULL) ext_node = malloc (sizeof(node)); 
Run Code Online (Sandbox Code Playgroud)

这个错误没有意义

AC编译器将在编译时初始化静态变量(在C++中放宽了此要求,并且您的原始代码将使用C++编译器进行编译).

你可以这样做:

static int foo;  // default initialized to 0
static int bar = 42;
Run Code Online (Sandbox Code Playgroud)

但不是这个:

static int baz = some_func();  // Error: at compile time the value to put into baz is not known.
Run Code Online (Sandbox Code Playgroud)