所以我有以下结构:
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;
}
答案 0 :(得分:0)
您的代码看起来很好,但您不是initialVariableVector->variables
中的初始化值。
此外,尝试使用calloc()而不是malloc()
,用零填充内存块。
例如:
VariableVector* initialVariableVector = (VariableVector*) calloc (1, sizeof(VariableVector));
答案 1 :(得分:0)
通常的做法是将指向结构的指针传递给初始化器,而不是返回指向结构的指针。这将允许您避免不必要的动态内存分配(这是错误的常见来源),并初始化自动内存或其他结构的一部分中的结构:
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();
}