Как освободить динамически выделенную память в структуре - 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.