数据结构vehicle_array_t
有时会在添加新的vehicle_t
时出现段错误。
我尝试以不同的顺序插入和删除内容,但这可能是一个边缘情况,我不知道如何复制。
结构vehicle_array_t
的定义:
typedef struct {
int size;
int used;
vehicle_t *vehicles;
} vehicle_array_t;
用于添加到数组的代码:
void add_vehicle(vehicle_array_t *array, vehicle_t vehicle)
{
if (array->used == array->size)
{
array->size *= 2;
array->vehicles = (vehicle_t*)realloc(array->vehicles, array->size * sizeof(vehicle_t));
}
array->vehicles[array->used] = vehicle;
array->used++;
}
添加新的vehicle_t
时,代码应适当调整数组的大小,但是奇怪的是,有时它会出现段错误。仅仅看一下代码就看不到任何问题。
答案 0 :(得分:2)
有一种方法可以发布的代码进行段错误,即realloc
失败(并因此返回NULL)。您不应realloc
直接进入数据指针-始终使用临时变量。
您的代码应为:
void add_vehicle(vehicle_array_t *array, vehicle_t vehicle)
{
if (array->used == array->size)
{
array->size *= 2;
vehicle_t *tmp = (vehicle_t*)realloc(array->vehicles, array->size * sizeof(vehicle_t));
if (tmp == NULL)
{
//realloc error
// add error handling here... or just exit
exit(1);
}
array->vehicles = tmp;
}
array->vehicles[array->used] = vehicle;
array->used++;
}