我创建了一个动态的int数组。我已经对其进行了测试,并且效果很好。现在,我要做的是创建一个使用两个指向动态int数组的指针的结构。
DualBuffer的定义是这样的:
typedef struct {
DynamicIntArray *active;
DynamicIntArray *fixed;
} DualBuffer;
DynamicIntArray的定义如下:
typedef struct {
int *data;
unsigned int size;
unsigned int used;
unsigned int sizeIncrease;
} DynamicIntArray;
要初始化DualBuffer,我在此函数上调用:
DualBuffer dbInitialize(unsigned int starting_size, unsigned int size_increse){
DualBuffer db;
diaInitializeArray(db.active,starting_size,size_increse);
diaInitializeArray(db.fixed, starting_size,size_increse);
return db;
}
哪个调用DynamicIntArray初始化函数:
void diaInitializeArray(DynamicIntArray *a, unsigned int startingSize, unsigned int size_increase){
a->data = (int *) malloc(startingSize * sizeof(int));
a->used = 0;
a->size = startingSize;
if (size_increase == 0) size_increase = 10;
a->sizeIncrease = size_increase;
}
我主体中的唯一一行是这样:
DualBuffer db = dbInitialize(5,5);
但是,这会产生分段错误。而且我不明白我在做什么错。
您没有为active
和fixed
分配空间。您应该在dbInitialize
中执行以下操作:
DualBuffer dbInitialize(unsigned int starting_size, unsigned int size_increse){
DualBuffer db;
db.active = malloc(sizeof(DynamicIntArray));
db.fixed = malloc(sizeof(DynamicIntArray));
diaInitializeArray(db.active,starting_size,size_increse);
diaInitializeArray(db.fixed, starting_size,size_increse);
return db;
}