gpt4 book ai didi

c - 我是否在 C 中正确初始化了自定义结构?

转载 作者:行者123 更新时间:2023-11-30 17:43:58 25 4
gpt4 key购买 nike

所以我有以下结构:

struct _Variable {
char *variableName;
char *arrayOfElements;
int32_t address;
};
typedef struct _Variable Variable;

struct _VariableVector {
int size; // elements full in array
int capacity; // total available elements
Variable *variables;
};
typedef struct _VariableVector VariableVector;

这是实现 VariableVector 的正确方法吗?

VariableVector* initVariableVector() {
VariableVector* initialVariableVector = malloc(sizeof(VariableVector));
if (initialVariableVector != NULL ) {
initialVariableVector->size = 0;
initialVariableVector->capacity = VECTOR_INITIAL_CAPACITY;
initialVariableVector->variables = malloc(
sizeof(Variable) * VECTOR_INITIAL_CAPACITY);
}
return initialVariableVector;
}

最佳答案

通常的做法是将指向结构的指针传递给初始化程序,而不是返回指向您尝试初始化的结构的指针。这将使您避免不必要的动态内存分配(这是错误的常见来源),并初始化自动内存中的结构或其他结构的一部分:

int initVariableVector(VariableVector* initialVariableVector) {
// initialise everything to zero first
memset(initialVariableVector, 0, sizeof(initialVariableVector));

initialVariableVector->capacity = VECTOR_INITIAL_CAPACITY;

if (NULL == (initialVariableVector->variables = calloc(
sizeof(*initialVariableVector->variables) , VECTOR_INITIAL_CAPACITY))
)
return -1; // indicate an error

return 0; // all good
}

然后调用它

VariableVector my_var_vector;
if (initVariableVector(&my_var_vector)) {
perror("initVariableVector");
abort();
}

关于c - 我是否在 C 中正确初始化了自定义结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com