我在我的代码中创建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;
}
这可能吗?
答案 0 :(得分:3)
您不能在程序的生命周期内分配全局变量。另外,我不明白你为什么这么做,你不应该担心,因为很少需要使用全局变量。全局变量在程序启动时分配,在结束时解除分配。
答案 1 :(得分:-1)
C程序的可执行文件分为以下几个部分:
文字细分:
本节将读取二进制的机器代码。文本段通常是只读段,以防止被修改。
初始化数据段:
初始化的所有全局,静态,常量和外部变量都记录在本节中。
未初始化的数据段:
此部分包含所有未初始化的全局和静态数据,并在程序开始执行之前初始化为零。
<强>堆强>
几乎所有动态内存分配都来自本节。
<强>堆栈:强>
此段从非常高的地址开始,并在调用函数时增长下行词。 函数框架,局部变量,返回地址等从此段获取内存。正如伊莱亚斯指出的那样, 这个堆栈与堆栈数据结构非常不同。这是一个内存片段,其中是一种样式 组织数据。它们中唯一常见的是它们以LIFO方式动态增长。
提出你的问题,你需要在全局空间中声明一个指针,如
using
并且在main()中,您可以动态分配所需的内存并使该指针指向该内存
my_struct *foo;
当你需要释放内存时,你可以使用realloc()来调整它的大小。
malloc(),calloc()不适用于全局数据段。 malloc库通过扩展断点来占用大量内存,同时初始化并使用malloc()等在该内存区域中进行动态内存分配。