在C外部函数中释放struct

时间:2016-02-01 17:03:55

标签: c object struct avr-gcc

我在我的代码中创建struct对象,我想破坏这个对象。我知道,为了创建指针,我必须使用malloc()来分配和free()来解除分配指针或数组。但我对结构对象有疑问。我在这里寻找答案,我找到了使用括号{}的解决方案 - 将struct对象放在括号中,因此右括号struct对象的外部将被释放。但我有兴趣在全局数组中释放对象。我怎样才能解除这样的对象?示例代码

typedef struct {
  unsigned char m_some_property;
} my_struct;


static my_struct g_myStructArr[10];


int main(void)
{
  g_myStructArr[0].m_some_property = 20;
  // how to use brackets {} here to deallocate that object?
  return 0;
}

这可能吗?

2 个答案:

答案 0 :(得分:3)

您不能在程序的生命周期内分配全局变量。另外,我不明白你为什么这么做,你不应该担心,因为很少需要使用全局变量。全局变量在程序启动时分配,在结束时解除分配。

答案 1 :(得分:-1)

C程序的可执行文件分为以下几个部分:

文字细分:

本节将读取二进制的机器代码。文本段通常是只读段,以防止被修改。

初始化数据段:

初始化的所有全局,静态,常量和外部变量都记录在本节中。

未初始化的数据段:

此部分包含所有未初始化的全局和静态数据,并在程序开始执行之前初始化为零。

<强>堆

几乎所有动态内存分配都来自本节。

<强>堆栈:

此段从非常高的地址开始,并在调用函数时增长下行词。     函数框架,局部变量,返回地址等从此段获取内存。正如伊莱亚斯指出的那样,     这个堆栈与堆栈数据结构非常不同。这是一个内存片段,其中是一种样式     组织数据。它们中唯一常见的是它们以LIFO方式动态增长。

提出你的问题,你需要在全局空间中声明一个指针,如

using

并且在main()中,您可以动态分配所需的内存并使该指针指向该内存

my_struct *foo;

当你需要释放内存时,你可以使用realloc()来调整它的大小。

malloc(),calloc()不适用于全局数据段。 malloc库通过扩展断点来占用大量内存,同时初始化并使用malloc()等在该内存区域中进行动态内存分配。

A typical memory layout of a C program.