@julien_sorel

Как освободить память в массиве структур?

Есть функция, инициализирующая массив, состоящий из структур. Функция работает, но Valgrid выдает ошибку "12 bytes are definitely lost ..."

void init_product(struct product *pr, const char *title, const char *code,
        int stock, double price)


{   char *temp;
    temp = title;
    temp = malloc(strlen(title) + 1);
    if (temp == NULL){
       return NULL;
    }
        
    strcpy(temp, title);
        title = temp;
        pr->title = title;  
        
        
        int i = 0;
        while (*code) {
            pr->code[i] = (*code);
            code++;
            i++;
            if (i == 7)
                break;
        }
        pr->code[i] = '\0';
          
        
pr->stock = stock;
pr->price = price;

}

Память для поля title была dynamically allocated, поэтому теперь ее надо освободить, изменив для этого main.c

int main()
{
    struct product p;
    init_product(&p, "test", "1234", 1, 0.50);
}

И вот тут я не знаю что делать. free(p.title) не помогает.
  • Вопрос задан
  • 1756 просмотров
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Есть функция, инициализирующая массив, состоящий из структур.

В вашем примере инициализируется единственный экземпляр структуры.

struct product *pr

Покажите определение этой структуры.

pr->code[i] = (*code);

Без определения непонятно, но кажется вы пишете в неинициализированный массив.

free(p.title) не помогает

А должно бы. Ошибка от Valgrind та же самая? Добавьте --track-origins=yes для ясности.
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Подозреваю, проблема тут:
title = temp;
pr->title = title;
Сделайте pr->title = temp; и проверьте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы