gpt4 book ai didi

c - 在一个 malloc 中为元素分配结构和内存

转载 作者:行者123 更新时间:2023-12-04 11:07:00 24 4
gpt4 key购买 nike

我确定这是一个基本问题,但我无法确定这是否是合法的内存分配策略。我正在从文件中读取数据并填充结构。成员的大小在每次读取时都是可变的,所以我的结构元素是这样的指针

struct data_channel{
char *chan_name;
char *chan_type;
char *chan_units;
};

所以在阅读之前,我会弄清楚每个字符串的大小,以便我可以为它们分配内存我的问题是我可以为结构和字符串分配内存在一个 malloc 中,然后填充指针吗?

假设 chan_name 的大小为 9,chan_type 为 10,chan_units 为 5。所以我会分配并执行类似这样的操作。

struct data_channel *chan;

chan = malloc(sizeof(struct data_channel) + 9 + 10 + 5);
chan->chan_name = chan[1];
chan->chan_type = chan->chan_name + 9;
chan->chan_units = chan->chan_type + 10;

所以我读了几篇关于内存对齐的文章,但我不知道这样做是否有问题,或者它会产生什么样的意想不到的后果。我已经在我的代码中实现了它,它似乎工作正常。我只是不想跟踪所有这些指针,因为实际上我的每个结构都有 7 个元素,而且我可以有超过 100 个 channel 。这当然意味着 700 个指针加上每个结构的指针,总计 800 个。我还必须设计一种方法来释放它们。我还想将此策略应用于字符串数组,然后我需要有一个指针数组。我现在没有任何可以混合数据类型的结构,这可能是个问题,但我可能会是个问题吗?

最佳答案

如果 chan_name 是一个 8 个字符的字符串,chan_type 是一个 9 个字符的字符串,chan_units 是一个 4 个字符的字符串,那么它会当您修复分配给 chan_name 时遇到的编译错误时,工作正常。

如果你为结构体加上所有的字符串(包括它们的字符串终止符)分配了足够的内存,那么使用这样的方法是可以的。也许不是所有人都推荐,但它会起作用。

关于c - 在一个 malloc 中为元素分配结构和内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18466304/

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