Как освободить динамически выделенную память в структуре - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Заголовочный файл myheader.h
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;
}
Каким обзором освободить (где именно)? О функций free() знаю)

Решение задачи: «Как освободить динамически выделенную память в структуре»

textual
Листинг программы
 free(meet.prod); free(meet2.prod);

Объяснение кода листинга программы

  1. meet - это структура, которая содержит указатель на динамически выделенную память под названием prod.
  2. meet2 - это также структура, которая содержит указатель на динамически выделенную память под названием prod.
  3. Функция free используется для освобождения памяти, на которую указывают указатели meet.prod и meet2.prod.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы