C:使用TIN结构初始化指针时出现分段错误
我已经创建了一个动态int数组。我已经测试过了,效果很好。现在我要做的是创建一个结构,它使用两个指向动态int数组的指针 DualBuffer定义如下所示:C:使用TIN结构初始化指针时出现分段错误,c,C,我已经创建了一个动态int数组。我已经测试过了,效果很好。现在我要做的是创建一个结构,它使用两个指向动态int数组的指针 DualBuffer定义如下所示: typedef struct { DynamicIntArray *active; DynamicIntArray *fixed; } DualBuffer; DynamicIntArray的定义如下: typedef struct { int *data; unsigned int size; uns
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);
但是,这会产生分段错误。我不明白我做错了什么。您没有为
活动的和固定的分配空间。您应该在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;
}
您没有为active
和fixed
分配空间,因此当您将其传递给diaInitializeArray
并作为a->data
访问时,先生,您遇到了麻烦。在dbInitialize
中,db
变量,包括其成员active
和fixed
未初始化。您正在将未初始化的指针值从db.active
和db.fixed
传递到diaInitializeArray
函数,即取消对未初始化指针值的引用,在这种情况下,导致未定义的行为表现为分割错误。我刚刚添加了这个代码,因为我不知道如何初始化C中的指针(我是新的,用于C++和新的NTO存在于这里),它已经工作了!谢谢你的确认@不客气。请注意,如果您这样分配内存,那么您应该在某个时候使用free()
函数来释放内存。Ok。我将把它添加到我创建的dbFree函数中