我在这里读了一些关于堆栈溢出的其他问题,我修复了我使用free()时遇到的问题;
我有一个这种类型的结构数组:
typedef struct _event {
char* desc;
int start;
int end;
} event;
但似乎我只能释放desc
,而如果我尝试使用免费的两个整数(开始/结束),它就不起作用。
阅读其他帖子中的其他答案,我明白我无法释放我无法解决的问题。关键是:我不需要malloc()
整数。但在我的练习中,我真的需要擦除该数组块。 (我不是指整个阵列,只是那个块)。
我不想在这篇文章中加入太多代码,不要打扰读者,但如果你需要请告诉我!
目前我正在使用:
free(event[i].desc);
在某个for
语句下的if
循环中。
问题是如何free
还event[i].start
和event[i].end
?
提前感谢您,我对这个愚蠢的问题感到抱歉,但我想知道是否可以释放整个单元格,而不是使用像' 0'这样的标记。
P.S。如果您对free()
函数有一篇好文章或教程,请将它链接到我吗?
答案 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>