c - 在程序的生命周期中使用 malloc

标签 c malloc

海湾合作委员会 4.4.4 c89

我一直想在项目的整个生命周期中使用 malloc 作为作用域。

但我只是想知道我的想法是否是最佳实践。例如,我在 main 中初始化了一个结构实例。并创建 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;
}

最佳答案

看起来不错。

关于 create_network_device 我有一点或两点

Network_dev* create_network_device(Network_dev *network)

无需传入指针;我宁愿有 Network_dev* create_network_device(void)

{
    network = malloc(sizeof *network);

if 并不是真正必要的;如果 malloc 失败,函数末尾的 return networkreturn NULL 相同。

    if(network == NULL) {
        return NULL;
    }

如果分配成功,您可能希望确保结构成员在此处处于已知状态

    /* if (network) {       */
    /*     id = 0;          */
    /*     name = NULL;     */
    /* }                    */

    return network;
}

关于c - 在程序的生命周期中使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718543/

相关文章:

c - 在 mmap 中执行代码以产生可执行代码段错误

检查 C 中的单元测试 : Best way to test static methods

c - 从 C 文件中读取输入时反转数组的问题

c++ - malloc() 与 HeapAlloc()

c - 为什么 malloc() 返回 null,STM32F407 上的堆需要或剩余多少?

c - 修改 C 函数内的二维 malloc 数组

c++ - android ndk 和 cygwin

c# - C "FILE *f;"的 C# 是什么?

c - 在没有新 malloc 的情况下从现有字符串动态构造一个数组

c++ - 帮助解决 c 错误