带有两个数组的类似arraylist的结构的'realloc()'出错

带有两个数组的类似arraylist的结构的'realloc()'出错,c,pointers,arraylist,struct,realloc,C,Pointers,Arraylist,Struct,Realloc,作为个人项目的一部分,我试图创建一个由2元组组成的动态数组,该数组显示a)程序中的行,b)与该行关联的字节码标记的数量。我将其实现为数组结构: typedef结构{ int count;//元素数 int capacity;//arraylist的总容量 整数*行; 整数*行数; } 这是基于代码库中的示例,例如: int计数; 国际能力; uint8_t*字节; 我的问题来自重新分配-我有几个辅助函数/宏用于增长和重新分配数组列表内存-这里特别是宏GROW_array and reallo

作为个人项目的一部分,我试图创建一个由2元组组成的动态数组,该数组显示a)程序中的行,b)与该行关联的字节码标记的数量。我将其实现为数组结构:

typedef结构{
int count;//元素数
int capacity;//arraylist的总容量
整数*行;
整数*行数;
}
这是基于代码库中的示例,例如:

int计数;
国际能力;
uint8_t*字节;
我的问题来自重新分配-我有几个辅助函数/宏用于增长和重新分配数组列表内存-这里特别是宏GROW_array and reallocation(),如下所述。当我尝试重新分配
时,它可以正常工作,但当我尝试重新分配行数后,会多次出现分段错误和
realloc():无效的旧大小

我使用的是Bob Nystrom的手工艺解释器中的代码库,特别是这里的第一部分。大多数代码都来自于此,尽管对添加的一些代码进行了修补

大多数情况下,我已经添加了很多检查,并使用gcc中我能找到的所有调试特性来运行它。值得注意的是,
realloc():无效的旧大小
已经停止出现,因为我已经修改了一些代码。 编辑:添加了应重现行为的主功能

intmain(){
线性排列线;
//初始化为0/NULL
初始线性阵列(&L);
updateLineArray(&行,0,1);
}
//我正在使用的结构
类型定义结构{
国际能力;
整数计数;
整数*行;
整数*行数;
}线性排列;
/*注意:LineArray已在前面用初始化
容量=0;
计数=0;
行=空;
lineCount=NULL;
*/
void updateLineArray(LineArray*数组、整数行、整数计数){
//如果“行”中有行--请更新它
int index=containsLine(数组,行);
if(index!=-1){//if索引不是错误代码
//我想我修复了一个bug?
数组->行计数[索引]+=计数;
返回;
} 
//ELSE——将行添加到末尾(自然追加);然后递增
否则{
//检查阵列是否过度生长
如果(数组->容量<数组->计数+1){
//如果是,重新生长数组
int old_capacity=阵列->容量;
阵列->容量=增加容量(旧容量);
//重新分配阵列。
数组->行=增长数组(数组->行,整数,旧容量,
阵列->容量);
数组->行数=增长数组(数组->行数,整数,旧容量,
阵列->容量);
}
//正确更新线路
数组->行[数组->计数]=行;
数组->行计数[数组->计数]=计数;
数组->计数++;
返回;
}
}
//我在这里使用的内存管理函数/宏
#定义增长容量(容量)\
((容量)<8?8:(容量)*2)
#定义成长数组(上一个、类型、旧计数、计数)\
(类型*)重新分配(以前,sizeof(类型)*(旧计数)\
尺寸(类型)*(计数))
作废*重新分配(作废*以前,大小\u t旧大小,大小\u t新大小){
//如果大小为空,则将其擦除并获取空指针
如果(新闻大小==0){
免费(以前);
返回NULL;
}
//将数据重新分配到新的大小
//is Oldsize为零::malloc(数据,新闻大小)
返回realloc(上一个,新闻大小);
}

您能否发布一个与您尝试测试的主函数类似的主函数?
#定义成长数组(previous,type,oldCount,count)
请发布一个。