free()+structure+ptr
typedef struct cell
{
cell *prev;
char *key;
char *cnt;
}
соответственно есть поинтер:
struct cell *cell_ptr;
В процессе выделяю память для key,cnt, для собственно структуры....
Все хорошо, но вот надо память освободить:
free((*cell_ptr).key); не работает....
А надо за собой почистить полностью....
Я так понимаю, что free(cell_ptr) освободит память занятую только указателями, но никак не память НА КОТОРУЮ эти указатели ссылаются....
В чем я не прав?
Да, и для чего написано "typedef", если после закрывающей фигурной скобки не указан новый тип?
free():invalid pointer 0xXXXXXXX (адрес совпадает с тем,что говорит дебаггер)
Странно....
а typedef это какие-то тонкости gcc компилятора.....
в принципе не думаю что это принципиально....:)
т.е на указатель он ругается при free(), но при работе с этим указателем никаких проблем нет....
Такой тупости я не ожидал от себя.....
Почему нельзя освободить память?!
Да потому что конкретно в эту струтуру я передаю указатель на сатический массив определенный в коде!!!
Блин! только пол-первого, а мне уже не хватает пива....
(мож уже пора подумать о профпригодности? :( )
Цитата: 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.