是否有更好的方法为struct ptrs使用辅助函数?

时间:2012-02-01 03:34:33

标签: c

我有一个需要像指针一样的结构,我想为它清除分配内存,但我担心如果它不止一次用于一个实例,那么我将遇到问题。这就是我的意思:

structptr.h

typedef struct STRUCTPTR STRUCTPTR;

STRUCTPTR *STRUCTPTR_init();

structptr.c

struct STRUCTPTR
{
  char *t1;
  int t2;
  float t3;
  double t4;
};


STRUCTPTR *STRUCTPTR_init()
{
  STRUCTPTR *temp = calloc(4, sizeof (struct STRUCTPTR));
  if (!temp)
    return NULL;
  return temp;
}

的main.c

#include "structptr.h"

int main(void)
{
  STRUCTPTR *s = STRUCTPTR_init();

  s = STRUCTPTR_init();
  return 0;
}

1 个答案:

答案 0 :(得分:1)

如果我理解你是正确的,你想要创建结构,如果它没有被创建,但是如果已经创建了你想要什么都不做?

这可以通过将指针作为您在评论中询问的参数来完成。只需记住在第一次调用函数之前首先将指针设置为NULL

STRUCTPTR *STRUCTPTR_init(STRUCTPTR *old)
{
    if (old == NULL)
        old = malloc(...);
    return old;
}

/* ... */

STRUCTPTR *p = NULL;
p = STRUCTPTR_init(p);

/* ... */

p = STRUCTPTR_init(p);