gpt4 book ai didi

c - 结构的分配和释放对象

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:22 25 4
gpt4 key购买 nike

海湾合作委员会 4.4.4 c89

我的 channel.h 文件中有以下代码

typedef struct channel_tag channel_t;

channel_t* open_channel(size_t channel_id);
void close_channel(channel_t *channel);

在我的 channel.c 文件中

#include "channel.h"

struct channel_tag {
size_t channel_id;
};

channel_t* open_channel(size_t channel_id)
{
channel_t *channel = malloc(sizeof *channel);

if(channel == NULL) {
fprintf(stderr, "Cannot allocate memory\n");
return NULL;
}

channel->channel_id = channel_id;
printf("Channel [ %zu ] has been created\n", channel->channel_id);

return channel;
}

void close_channel(channel_t *channel)
{
printf("Channel [ %zu ] resources has been released\n", channel->channel_id);
free(channel);
}

问题出在我的 main.c 文件上。这里我有一个 for 循环,它创建 5 个 channel 对象并为它们分配内存。但是,如果我想稍后在我的程序中释放它们,我不确定如何获得对它们的引用。这只是我正在测试的 5 个。但以后可能会达到 300。

int main(void)
{
size_t i = 0;

channel_t *channel = NULL;

for(i = 0; i < 4; i++) {
channel = open_channel(i);

if(channel == NULL) {
fprintf(stderr, "Cannot create channel [ %zu ]\n", i);
}
}

/* Do some stuff with the channels and now free them before the program exists.
However, I need to loop and pass all of them, not just one */
for(i = 0; i < 4; i++) {
close_channel(channel);
}
return 0;
}

非常感谢您的任何建议,

最佳答案

好吧,您在主 channel 中一遍又一遍地重写同一个 channel 。如果你想要 4 个 channel ,你显然需要 4 个变量来存储它们,或者一个包含 4 个项目的数组。

channel_t *channel[4]; for (...) channel[i] = open_channel(i);

哦还有for (int i = 0; i < 4; i++)将使 4 个循环而不是 5 个循环。

关于c - 结构的分配和释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196659/

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