在对树的外部节点进行分组的递归方法中,我需要在该函数内部动态分配内存。但是声明
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/