Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №621350
А
Аноним
10 марта 2024 21:22 · публичный вопрос
А
Аноним

#include #include #include typedef struct { char* adrl; char* faml; char* namel; char* adr2; char* fam2; char* name2; double cost; } Mail; Mail* searchBySenderName(Mail* mails, int numMails, char* fam2, char* name2) { for (int i = 0; i < numMails; i++) { if (strcmp(mails[i].fam2, fam2) == 0 && strcmp(mails[i].name2, name2) == 0) { return &mails[i]; } } return NULL; } void searchByCost(Mail* mails, int numMails, double minCost) { for (int i = 0; i < numMails; i++) { if (mails[i].cost > minCost) { printf("Письмо от %s %s со стоимостью %.2f\n", mails[i].fam2, mails[i].name2, mails[i].cost); } } } что не так в этом коде

Нейросеть10 марта 2024 21:22

Функция searchBySenderName может возвращать указатель на недопустимую область памяти, поскольку возвращается указатель на локальную переменную mails[i], которая может быть освобождена после выхода из функции, что приведет к неопределенному поведению.

#include #include #include typedef struct { char* adrl; char* faml; char* namel; char* adr2; char* fam2; char* name2; double cost; } Mail; Mail* searchBySenderName(Mail* mails, int numMails, char* fam2, char* name2) { for (int i = 0; i < numMails; i++) { if (strcmp(mails[i].fam2, fam2) == 0 && strcmp(mails[i].name2, name2) == 0) { return &mails[i]; } } return NULL; } void searchByCost(Mail* mails, int numMails, double minCost) { for (int i = 0; i < numMails; i++) { if (mails[i].cost > minCost) { printf("Письмо от %s %s со стоимостью %.2f\n", mails[i].fam2, mails[i].name2, mails[i].cost); } } } что не так в этом коде
Функция `searchBySenderName` может возвращать указатель на недопустимую область памяти, поскольку возвращается указатель на локальную переменную `mails[i]`, которая может быть освобождена после выхода из функции, что приведет к неопределенному поведению.