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

标签 c list memory-management dynamic static

在对树的外部节点进行分组的递归方法中,我需要在该函数内部动态分配内存。但是声明

static node* ext_node = malloc (sizeof(node)); 

不工作,编译器给出错误,说

initializer element is not constant.

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

我需要这个是因为,当需要在列表中添加更多元素时,方法 insert_to_end (node*) 将负责为新节点分配存储空间,所以有了这个我可以创建任意长度的 list 并且也有精确的内存要求。

但是用c语言怎么实现呢?

最佳答案

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

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

static node* ext_node;
if (ext_node == NULL) ext_node = malloc (sizeof(node)); 

That error doesn't make sense

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

你可以这样做:

static int foo;  // default initialized to 0
static int bar = 42;

但不是这个:

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

关于c - 如何在c中动态分配静态存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796737/

相关文章:

c++ - 如何使用迭代器达到列表项的值?

python - 将列表列表转换回元组列表

c - 从创建/修改 malloc realloc 的内存块中读取值?

objective-c - ARC 适用于所有对象?

android - 如何从android中的 native 代码中查找内存泄漏

c - 文字和常量在C中是同一个概念吗?

c++ - 在 extern c 中编写 C++ 代码

c - C 语言中 strdup() 的实现

c - 为什么我在 C 中的递归函数会导致堆栈溢出?

c# - “类型”的使用类似于变量(C#)