【发布时间】:2019-10-17 16:54:14
【问题描述】:
我需要动态创建一个结构数组,执行 malloc 命令时我不知道大小。所以我想每次我需要另一个结构时都可以使用 realloc !例如这段代码:
主要:
int main(void) {
flights *flight_list = NULL;
int numFlights = 0;
numFlights = load_flights(&flight_list);
/* output flights. Problem: Only first flight is there, the second is not allocated! */
函数如下:
short load_flights(flights **flight_list) {
flight_list[0] = calloc(1, sizeof(flights));
flight_list[0]->price = 69;
flight_list[0] = realloc(*flight_list, sizeof(flights)*2);
flight_list[1]->price = 70;
return 2; //num of flights-structs
问题是,实际上应该创建 2 个元素,但只有 1 个元素存在 - 检查此调试屏幕截图:
如您所见,flight_list[0] 存在,但flight_list[1] 不存在!但是 realloc 应该可以完成这项工作吗?
我理解错了吗?
【问题讨论】:
-
使用
load_flights(&flight_list),您(以一种非常简单的方式)将一个指针传递给flights结构对象的数组。在load_flights函数中,您需要取消引用指针以获取对象数组。