gpt4 book ai didi

无法弄清楚如何释放我的结构

转载 作者:行者123 更新时间:2023-11-30 19:09:08 25 4
gpt4 key购买 nike

我需要释放()为我的结构配置分配的所有内存。

struct keysnvalues {
char* key;
char* value;
};

struct section {
char *name;
struct keysnvalues *keysnvalues;
int keysnvalues_ammount;
};

struct config {
struct section *sections;
int section_ammount;
};

在代码的开头我这样做

struct section * sect = malloc(sizeof(struct section) * 255);
struct keysnvalues * keysnvalue = malloc(sizeof(struct keysnvalues) * 255);

如果我想添加部分,我会为第一个部分执行此操作

sect[++num_section].name = buffer; // buffer is the name

接下来的部分

sect[num_section].keysnvalues = keysnvalue;
sect[num_section].keysnvalues_ammount = num_keysnvalues;
cfg -> section_ammount++;

//start with new keysnvalue
num_keysnvalues = 0;
keysnvalue = malloc(sizeof(struct keysnvalues) * 255);
sect[++num_section].name = buffer;
sect[num_section].keysnvalues = 0;

如果我想向我正在使用的部分添加键和值,我会这样做

keysnvalue[num_keysnvalues].key = key;
keysnvalue[num_keysnvalues++].value = value;

完整代码在这里:https://pastebin.com/pGztJ9k4

我知道这可能是一个愚蠢的问题,但我现在几个小时都不知道如何释放整个结构配置。

我非常感谢您的帮助。

最佳答案

通常,当且仅当指针已通过 malloc() 分配时,您才应该 free() 指针。为了实现这一点,您必须确保不会“释放”任何指向 malloc 内存地址的指针,例如通过多次将 malloc 分配给同一个变量,而无需复制其先前的值或未释放先前分配的内存。

我没有分析你提到的完整代码。但看起来好像您在为 sect[i].keysnvalues 分配新值之前将 keysnvalue 的值复制到当前部分。因此,似乎每个部分都有自己的keysnvalue,您可以循环它:

for (int i=0;i< num_section;i++) {
if (sect[i].keysnvalues != NULL) {
free(sect[i].keysnvalues);
// free(sect[i].name); // if buffer has also been malloced
}
}
free (keysnvalue);
free (sect);

您可能还必须循环遍历每个 sect[i].keysnvalue 才能最终释放键/值

确保您要在程序结束时释放的节成员始终使用NULLmalloc进行初始化ed 值,以防止您的代码“释放”垃圾指针值。

关于无法弄清楚如何释放我的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com