gpt4 book ai didi

c - realloc 不为下一个结构分配内存

转载 作者:行者123 更新时间:2023-11-30 20:17:43 26 4
gpt4 key购买 nike

我需要动态创建一个结构数组,但执行 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 个元素 - 检查此调试屏幕截图:

Debugging Screenshot

如您所见,flight_list[0] 存在,但 flight_list[1] 不存在!但是 realloc 应该可以完成这项工作吗?

我理解有什么问题吗?

最佳答案

这一行有一个错误:

flight_list[1]->price = 70;

[]-> 都取消引用指针。 a[b] 相当于 *(a+b)a->b 相当于 (*a)。 b. 。因此,您的线路意味着:

(**(flight_list + 1)).price = 70;

但是,flight_list(在load_flights中)是指向main中的flight_list变量的指针!在 main 的上下文中,您正在计算 &flight_list + 1,这是一个无效指针:您正在获取恰好位于本地内存旁边的内存内容变量。

正确的代码是:

(*(*flight_list + 1)).price = 70;

*flight_listrealloc 返回的指针。这里我们可以在动态数组中向前移动一个元素。

我们也可以将其写为:

(*flight_list)[1].price = 70;

关于c - realloc 不为下一个结构分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com