mec*_*sin 2 c malloc memory-management
我确信这是一个基本问题,但我无法确定这是否是一个合法的内存分配策略.我正在读取文件中的数据,我正在填写一个结构.成员的大小在每次读取时都是可变的,所以我的struct元素就是这样的指针
struct data_channel{
char *chan_name;
char *chan_type;
char *chan_units;
};
Run Code Online (Sandbox Code Playgroud)
所以在阅读之前我弄清楚每个字符串的大小是什么,所以我可以为它们分配内存我的问题是我可以在一个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;
Run Code Online (Sandbox Code Playgroud)
所以我读了几篇关于内存对齐的文章,但我不知道上面的内容是否有问题,或者它可能产生什么样的意外后果.我已经在我的代码中实现了它,它似乎工作正常.我只是不想跟踪所有这些指针,因为实际上我的每个结构都有7个元素,我可以有100个以上的通道.那当然意味着700个指针加上每个结构的指针总共800个.我还必须设计一种方法来释放它们.我还想将这个策略应用于字符串数组,然后我需要有一个指针数组.我现在没有任何结构混合数据类型可能是一个问题,但我可能会成为一个问题?
如果chan_name是一个8个字符的字符串,chan_type是一个9个字符的字符串,并且chan_units是一个4个字符的字符串,那么当你修复分配时的编译错误时它会正常工作chan_name.
如果为结构分配了足够的内存以及所有字符串(包括它们的字符串终止符),那么可以使用这样的方法.也许不是所有人都推荐,但它会起作用.