我面临着有关带有双指针动态数组的realloc的一些问题。我想执行的是在type Flight **的[[array时间表内的type Flight *的add 2指针。为此,我依赖于Functions.c文件中的函数 nulladd_flight
。此功能要求用户提供航空公司和航班号值,并将这些数据存储在新的Flight* f
中。如果时间表是
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;
}
add_flight
时出现的在,因此在此时间表数组中仍然只存储了第一个排期。我不知道为什么第二个排期未添加到时间表中。有人可以解释一下为什么这个重新分配失败吗?感谢您的帮助:)我面临着有关带有双指针动态数组的realloc的一些问题。我要执行的操作是在Flight **类型的数组计划内添加2个Flight *类型的指针。对于...add_flight
函数中,数据确实存储在新的Flight* f
中,然后考虑else语句:变量numberFlights
获得值2。但是,realloc不起作用
,该时间表是未放大