Как освободить динамически выделенную память в структуре - C (СИ)
Формулировка задачи:
Заголовочный файл myheader.h
Сам код
Каким обзором освободить (где именно)? О функций free() знаю)
Листинг программы
- struct tagDate
- {
- int yy, mm, dd;
- };
- struct tagGoods
- {
- char name[50];
- double price;
- char *prod;
- struct tagDate date;
- };
- typedef struct tagGoods Goods;
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "myheader.h"
- void getGoods(Goods *pGoods)
- {
- Goods temp;
- char buf[255];
- printf("Input YY MM DD: ");
- scanf("%d %d %d", &temp.date.yy, &temp.date.mm, &temp.date.dd);
- fflush(stdin);
- printf("Input name: ");
- gets(temp.name);
- printf("Input price: ");
- scanf("%lf", &temp.price);
- fflush(stdin);
- printf("Input prod: ");
- gets(buf);
- temp.prod = (char*) malloc(strlen(buf) + 1);
- strcpy(temp.prod, buf);
- *pGoods = temp;
- }
- void putGoods(Goods g)
- {
- printf("%s %s %f date = %d %d %d \n", g.name, g.prod, g.price, g.date.yy, g.date.mm, g.date.dd);
- }
- void cpyGoods(Goods *d, Goods *s)
- {
- *d = *s;
- d->prod = NULL;
- d->prod = (char*) malloc(strlen(s->prod) + 1);
- strcpy(d->prod, s->prod);
- }
- int main(int argc, char *argv[])
- {
- Goods meat, meat2;
- getGoods(&meat);
- cpyGoods(&meat2, &meat);
- putGoods(meat2);
- system("PAUSE");
- return 0;
- }
Решение задачи: «Как освободить динамически выделенную память в структуре»
textual
Листинг программы
- free(meet.prod); free(meet2.prod);
Объяснение кода листинга программы
meet
- это структура, которая содержит указатель на динамически выделенную память под названиемprod
.meet2
- это также структура, которая содержит указатель на динамически выделенную память под названиемprod
.- Функция
free
используется для освобождения памяти, на которую указывают указателиmeet.prod
иmeet2.prod
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д