如何在c中动态分配静态存储?
How to allocate static storage dynamically in c?
在对树的外部节点进行分组的递归方法中,我需要在 function.But 语句
中动态分配内存
static node* ext_node = malloc (sizeof(node));
不工作,编译器给出错误,说
initializer element is not constant.
简而言之,我想问一下,当动态获取指针指向的内存时,如何在递归调用中将static
关键字与指针一起使用?
我需要这个是因为,当需要在列表中添加更多元素时,方法 insert_to_end (node*)
将负责为新节点分配存储空间,因此我可以创建 list
任何长度,这也有确切的内存要求。
但是c语言怎么实现呢?
如果确实需要这样做,只需将其分成 2 个操作,如下所示:
static node *ext_node;
if (ext_node == NULL)
ext_node = malloc(sizeof(node));
但对我来说它看起来像是有缺陷的设计(通常在函数内部使用 static
变量是一种不好的做法——使函数不是 reentrable)。
为什么不将此 ext_node
作为参数传递给您的函数?为什么你首先需要做这个变量 static
?
请注意 通常 在递归函数中使用 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.
在对树的外部节点进行分组的递归方法中,我需要在 function.But 语句
中动态分配内存static node* ext_node = malloc (sizeof(node));
不工作,编译器给出错误,说
initializer element is not constant.
简而言之,我想问一下,当动态获取指针指向的内存时,如何在递归调用中将static
关键字与指针一起使用?
我需要这个是因为,当需要在列表中添加更多元素时,方法 insert_to_end (node*)
将负责为新节点分配存储空间,因此我可以创建 list
任何长度,这也有确切的内存要求。
但是c语言怎么实现呢?
如果确实需要这样做,只需将其分成 2 个操作,如下所示:
static node *ext_node;
if (ext_node == NULL)
ext_node = malloc(sizeof(node));
但对我来说它看起来像是有缺陷的设计(通常在函数内部使用 static
变量是一种不好的做法——使函数不是 reentrable)。
为什么不将此 ext_node
作为参数传递给您的函数?为什么你首先需要做这个变量 static
?
请注意 通常 在递归函数中使用 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.