Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:使用TIN结构初始化指针时出现分段错误_C - Fatal编程技术网

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

C:使用TIN结构初始化指针时出现分段错误,c,C,我已经创建了一个动态int数组。我已经测试过了,效果很好。现在我要做的是创建一个结构,它使用两个指向动态int数组的指针 DualBuffer定义如下所示: typedef struct { DynamicIntArray *active; DynamicIntArray *fixed; } DualBuffer; DynamicIntArray的定义如下: typedef struct { int *data; unsigned int size; uns

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

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

您没有为
活动的
固定的
分配空间。您应该在
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函数中