我有一个需要像指针一样的结构,我想为它清除分配内存,但我担心如果它不止一次用于一个实例,那么我将遇到问题。这就是我的意思:
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;
}
答案 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);