gcc 4.4.4 c89
我一直想到将malloc用作项目的生命周期。
但我只是想知道我的想法是否是最好的做法。例如,我在main中初始化struct的实例。并创建2个用于创建和销毁的功能。我只是想知道这是否是正确的做法。
下面我有一些骨架代码。
非常感谢任何建议,
typedef struct Network_dev_t {
size_t id;
char *name;
} Network_dev;
Network_dev* create_network_device(Network_dev *network)
{
network = malloc(sizeof *network);
if(network == NULL) {
return NULL;
}
return network;
}
void do_something(Network_dev *network)
{
/* Do something with the network device */
}
void destroy_network_device(Network_dev *network)
{
free(network);
}
int main(void)
{
Network_dev *network = NULL;
network = create_network_device(network);
/* Do something with the network device */
do_something(network);
destroy_network_device(network);
return 0;
}
答案 0 :(得分:4)
看起来不错。
我对create_network_device
Network_dev* create_network_device(Network_dev *network)
无需传入指针;我宁愿拥有Network_dev* create_network_device(void)
{
network = malloc(sizeof *network);
if
并非真的有必要;如果malloc失败,则函数末尾的return network
与return NULL
相同。
if(network == NULL) {
return NULL;
}
如果分配成功,您可能希望确保结构成员在此处处于已知状态
/* if (network) { */
/* id = 0; */
/* name = NULL; */
/* } */
return network;
}
答案 1 :(得分:3)
这段代码对我来说很好看。我同意你的create_network_device
可以使用一点点工作。只是把他说的话拉到一起并使事情更清楚,这就是我写这个函数的方式:
Network_dev *create_network_device()
{
Network_dev *network = malloc(sizeof(*network));
if (network) {
network->id = 0;
network->name = NULL;
}
return network;
}
答案 2 :(得分:2)