Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

free()+structure+ptr

314
24 июля 2007 года
fanto
374 / / 15.02.2003
есть такая вот структура:
typedef struct cell
{
cell *prev;
char *key;
char *cnt;
}

соответственно есть поинтер:
struct cell *cell_ptr;

В процессе выделяю память для key,cnt, для собственно структуры....
Все хорошо, но вот надо память освободить:
free((*cell_ptr).key); не работает....
А надо за собой почистить полностью....
Я так понимаю, что free(cell_ptr) освободит память занятую только указателями, но никак не память НА КОТОРУЮ эти указатели ссылаются....
В чем я не прав?
3.3K
24 июля 2007 года
ShadyMan
191 / / 15.07.2006
Лучше бы писать не "(*cell_ptr).key", а cell_ptr->key, но так или иначе всё должно работать, если конечно key содержит действительный указатель. А в чём выражается сам факт несрабатывания?
Да, и для чего написано "typedef", если после закрывающей фигурной скобки не указан новый тип?
314
24 июля 2007 года
fanto
374 / / 15.02.2003
Key СОДЕРЖИТ нормальный указатель....(судя по дебаггеру), но!:
free():invalid pointer 0xXXXXXXX (адрес совпадает с тем,что говорит дебаггер)
Странно....
а typedef это какие-то тонкости gcc компилятора.....
в принципе не думаю что это принципиально....:)

т.е на указатель он ругается при free(), но при работе с этим указателем никаких проблем нет....
314
24 июля 2007 года
fanto
374 / / 15.02.2003
Я блин толстый тупой небритый недопрограммист!....
Такой тупости я не ожидал от себя.....
Почему нельзя освободить память?!
Да потому что конкретно в эту струтуру я передаю указатель на сатический массив определенный в коде!!!
Блин! только пол-первого, а мне уже не хватает пива....
(мож уже пора подумать о профпригодности? :( )
3.3K
24 июля 2007 года
ShadyMan
191 / / 15.07.2006
Цитата: fanto
а typedef это какие-то тонкости gcc компилятора.....
в принципе не думаю что это принципиально....:)



Чего там тонкости? Если ты несколько раз объявляешь в разных функциях одну и ту же структуру и лень каждый раз писать слово "struct", то для этого и пишут, скажем, typedef struct struct_name new_type. Это при условии, что структура уже была описана. А если нет, то как ты написал, только после этого ещё добавить имя для нового типа, например так:
typedef struct cell
{
cell *prev;
char *key;
char *cnt;
} new_type
После этого уже не надо писать "struct cell *cell_ptr", а достаточно new_type *cell_ptr.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог