C - 如何完全释放结构数组单元格

时间:2014-07-15 08:26:58

标签: c struct free

我在这里读了一些关于堆栈溢出的其他问题,我修复了我使用free()时遇到的问题;

我有一个这种类型的结构数组:

typedef struct _event {
char* desc;
int start;
int end;
} event;

但似乎我只能释放desc,而如果我尝试使用免费的两个整数(开始/结束),它就不起作用。 阅读其他帖子中的其他答案,我明白我无法释放我无法解决的问题。关键是:我不需要malloc()整数。但在我的练习中,我真的需要擦除该数组块。 (我不是指整个阵列,只是那个块)。

我不想在这篇文章中加入太多代码,不要打扰读者,但如果你需要请告诉我!

目前我正在使用:

free(event[i].desc);

在某个for语句下的if循环中。 问题是如何freeevent[i].startevent[i].end

提前感谢您,我对这个愚蠢的问题感到抱歉,但我想知道是否可以释放整个单元格,而不是使用像' 0'这样的标记。

P.S。如果您对free()函数有一篇好文章或教程,请将它链接到我吗?

2 个答案:

答案 0 :(得分:2)

如果您将事件分配为块,例如

event * p = (event *) malloc(sizeof(event);
p->desc = (char *) malloc (sizeof(char) * SIZE); // presume SIZE defined earlier

然后,您可以按以下顺序释放:

free(p->desc);
free(p); // will deallocate the entire block

希望这是你想要知道的。

答案 1 :(得分:1)

重要的是要了解您不能free只是结构的一部分: 在您的情况下,您有一个指针char和2 int

char*可以存储您通过malloc获得的地址:这可以被释放。但是2 int不能。 如果由于某种原因它们变得无关紧要而你真的需要摆脱这些变量,那么你可能错误地定义了你的结构:你可能想要拆分它。

另一种解决方案可能是使用默认值(例如0-1或您定义的任何内容)重置这些字段,并将char *释放为@Debasish Jana解释。< / p>