是否允许为静态变量动态分配内存,如下所示:
#include <stdio.h>
#include <stdlib.h>
struct person
{
int age;
int number;
};
static struct person* person_p = NULL;
int main()
{
person_p = (struct person*)malloc(10 * sizeof(struct person));
}
上面构建了代码,但它是否真的允许为静态变量动态分配内存?
答案 0 :(得分:4)
是的,它是有效且允许的。 (除非您将指针用作占位符)在使用它之前和之后,您可以(并且需要)在指针之间动态分配和free()
内存。
相反,请记下do not cast malloc()
和C家庭的返回值。
答案 1 :(得分:0)
我不明白为什么不。即使静态意味着只能有一个对象实例,您仍然需要该对象的空间。但请注意,malloc
'的任何内容都需要free
'd,因此您需要在main()
函数的末尾执行此操作。
答案 2 :(得分:0)
内存不是指向它的“拥有”。您可以执行以下操作:
说“动态分配内存 指针”真的没有意义。
任何指针都可以指向任何对象(受制于对齐和别名限制),指针的存储持续时间没有区别。
答案 3 :(得分:0)
请注意,指针是静态的,而不是它指向的内存。
static
意味着两件无关的事情:
在你的代码中,1。静态内存分配是无关紧要的,因为无论如何变量都是全局的,因此已经有了它。
然后,2。内部链接也无关紧要,因为你要做的就是在模块中。无论如何。
换句话说,person_p
就像你模块中通常的全局变量一样,你可以做任何你想做的事。
它只是由这一行代码定义的指针,因此您可以在其他位置动态分配内存,并根据需要将内存地址分配给person_p
。