【发布时间】:2013-08-30 06:02:38
【问题描述】:
我确信这是一个基本问题,但我无法确定这是否是合法的内存分配策略。我正在从文件中读取数据并填写一个结构。成员的大小在每次读取时都是可变的,所以我的结构元素是这样的指针
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 个通道。这当然意味着 700 个指针加上每个结构的指针,因此总共 800 个。我还必须设计一种方法来释放它们。我还想将此策略应用于字符串数组,然后我需要一个指针数组。我现在没有任何可以混合数据类型的结构,这可能是个问题,但我可能会是个问题吗?
【问题讨论】:
-
有一个明显的错误,会导致代码无法编译。
-
@JoachimPileborg - 你的意思是 chan 不是一个数组?
-
这看起来非常危险且不可携带。我只需构建一个分配例程(用于结构)和一个释放例程(用于结构)并完成它。无论如何你都必须分配和释放它,所以只需封装你不想处理的额外指针。
-
@MartinJames 不,OP 应该使用
&char[1]代替。并将其类型转换为正确的类型。 -
我在指针中看不到太多意义?为什么不能直接将 char 数组推入 data_channel?
标签: c memory-management malloc