Как освободить динамически выделенную память в структуре - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д