C:Realloc不适用于动态双指针数组

问题描述 投票:0回答:1

我面临着有关带有双指针动态数组的realloc的一些问题。我想执行的是在type Flight **的[[array时间表内的type Flight *add 2指针为此,我依赖于Functions.c文件中的函数add_flight。此功能要求用户提供航空公司和航班号值,并将这些数据存储在新的Flight* f中。如果时间表是

null

(尚未添加排期),则它会为新创建的排期allocates内存,否则<< realloc排期的大小以添加新的排期。Main.c文件:

int main() { int choice = 1; Flight** schedule = NULL; printf("---AIRPORT MANAGER---"); schedule = add_flight(schedule); printf("\n%s : %d\n", (*schedule)->airline, (*schedule)->flightNumber); schedule = add_flight(schedule); printf("\n%s : %d\n", (*schedule + 1)->airline, (*schedule)->flightNumber); return 0; }

Functions.c文件:

#include "Functions.h" void mygets(char* s, int maxLength) { fflush(stdout); if (fgets(s, maxLength, stdin) != NULL) { size_t lastIndex = strlen(s) - 1; if (s[lastIndex] == '\n') s[lastIndex] = '\0'; } } void flush() { char buffer; while ((buffer = getchar()) != EOF && buffer != '\n'); } Flight** add_flight(Flight** schedule) { Flight* f; char buffer[100]; if ((f = (Flight*)malloc(sizeof(Flight*))) == NULL) { exit(1); } printf("\n\n---FLIGHT CREATION---"); printf("\nAirline: "); mygets(buffer, sizeof(buffer)); if ((f->airline = _strdup(buffer)) == NULL) { exit(1); } memset(buffer, 0, 100); printf("\nFlight number: "); scanf("%d", &f->flightNumber); flush(); if (schedule == NULL) { if ((schedule = malloc(sizeof(Flight*))) == NULL) { exit(1); } *schedule = f; } else { int numberFlights = ((sizeof(*schedule)) / 4) + 1; if ((schedule = realloc(schedule, numberFlights * sizeof(Flight*))) == NULL) { exit(1); } *(schedule + numberFlights -1) = f; } return schedule; }

问题是在main.c中第二次调用add_flight时出现的
add_flight函数中,数据确实存储在新的Flight* f中,然后考虑else语句:变量numberFlights获得值2。但是,

realloc不起作用

,该时间表是

未放大

,因此在此时间表数组中仍然只存储了第一个排期。我不知道为什么第二个排期未添加到时间表中。有人可以解释一下为什么这个重新分配失败吗?感谢您的帮助:)我面临着有关带有双指针动态数组的realloc的一些问题。我要执行的操作是在Flight **类型的数组计划内添加2个Flight *类型的指针。对于...
c dynamic-memory-allocation allocation dynamic-arrays realloc
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.