C:使用结构初始化指针时出现分段错误

问题描述 投票:0回答:1

我创建了一个动态的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);   

但是,这会产生分段错误。而且我不明白我在做什么错。

c
1个回答
1
投票

您没有为activefixed分配空间。您应该在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;
}
© www.soinside.com 2019 - 2024. All rights reserved.