小编The*_*rev的帖子

在c中,具有专用于分配内存的功能是不是很糟糕?

我已经组织了具有分配内存的功能的ac项目

例如,我得到了这个结构:

  typedef struct t_example{
    int x;
    int y;
  }example;
Run Code Online (Sandbox Code Playgroud)

我创建了这个函数来初始化一个实例:

  /**
   return value must be freed
   */
  example * example_init(){
    example *p_example = malloc(sizeof(example));
    p_example->x = 42;
    p_example->y = 42;
    return p_example;
  }
Run Code Online (Sandbox Code Playgroud)

我可以像这样调用这个函数

example *p_example = example_init();
Run Code Online (Sandbox Code Playgroud)

但随着我的项目的增长,我发现有时我不需要分配内存,如果我只需要堆栈上的局部变量,但需要初始化它,所以我将init函数更改为:

  void example_init(example *p_example){
    p_example->x = 42;
    p_example->y = 42;
  }
Run Code Online (Sandbox Code Playgroud)

所以我可以像这样调用这个函数

example o_example;
example_init(&o_example);
Run Code Online (Sandbox Code Playgroud)

当然,如果我有一个指针,这个功能也可以工作

example *p_example = malloc(sizeof(example));
example_init(p_example);
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是最好的做法:1)提供,将分配内存(并正确记录本),因为它可以很方便进来的情况下的函数,或2),这应该是留给函数的调用者.

我还读到std函数没有动态分配内存,这就是strdup函数不是标准的原因.所以我会说第二种选择是最好的?

c memory-management

2
推荐指数
2
解决办法
464
查看次数

标签 统计

c ×1

memory-management ×1