我们可以在C中为静态变量动态分配内存吗?

时间:2015-05-27 12:35:58

标签: c dynamic-memory-allocation static-variables

是否允许为静态变量动态分配内存,如下所示:

#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));
}

上面构建了代码,但它是否真的允许为静态变量动态分配内存?

4 个答案:

答案 0 :(得分:4)

是的,它是有效且允许的。 (除非您将指针用作占位符)在使用它之前和之后,您可以(并且需要)在指针之间动态分配和free()内存。

相反,请记下do not cast malloc()和C家庭的返回值。

答案 1 :(得分:0)

我不明白为什么不。即使静态意味着只能有一个对象实例,您仍然需要该对象的空间。但请注意,malloc'的任何内容都需要free'd,因此您需要在main()函数的末尾执行此操作。

答案 2 :(得分:0)

内存不是指向它的“拥有”。您可以执行以下操作:

  • 动态分配内存
  • 使指针指向该内存

说“动态分配内存 指针”真的没有意义。

任何指针都可以指向任何对象(受制于对齐和别名限制),指针的存储持续时间没有区别。

答案 3 :(得分:0)

请注意,指针是静态的,而不是它指向的内存。

static意味着两件无关的事情:

  1. 给出静态内存分配(在程序开始时分配的内存,仅在程序结束时释放)
  2. 给出内部链接(不允许其他编译单元 - 模块 - 访问标识符。这里是变量,可以是函数)
  3. 在你的代码中,1。静态内存分配是无关紧要的,因为无论如何变量都是全局的,因此已经有了它。

    然后,2。内部链接也无关紧要,因为你要做的就是在模块中。无论如何。

    换句话说,person_p就像你模块中通常的全局变量一样,你可以做任何你想做的事。

    它只是由这一行代码定义的指针,因此您可以在其他位置动态分配内存,并根据需要将内存地址分配给person_p