Почему-то не освобождается память
От: Аноним  
Дата: 14.10.04 11:38
Оценка:
из ф-ции main() вызывается статический метод класса:

main ()
{
char* ptr = PT::MakeAllocation();
free ptr;
}

метод имеет вид:

char* PT::MakeAllocation(void)
{
return (char*) malloc(1);
}

Так вот, память выделяется нормально и указатель возвращается в main, но после команды free указатель ptr не равен нулю. Почему?
Re: Почему-то не освобождается память
От: Евгений Коробко  
Дата: 14.10.04 11:40
Оценка:
Освобождение памяти не приводит к очистке указателя. После этой операции ptr указывает на несуществующие данные
Posted via RSDN NNTP Server 1.9 gamma
Евгений Коробко
Re: Почему-то не освобождается память
От: Bell Россия  
Дата: 14.10.04 11:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Так вот, память выделяется нормально и указатель возвращается в main, но после команды free указатель ptr не равен нулю. Почему?


Во-первых
free(ptr);

Во-вторых аргумент free не обнуляется. Если тебе так нужен ноль — то обнули указатель вручную:
free(ptr);
ptr = 0;
Любите книгу — источник знаний (с) М.Горький
Re: Почему-то не освобождается память
От: GarryIV  
Дата: 14.10.04 11:43
Оценка:
Hello, !

> из ф-ции main() вызывается статический метод класса:


> main ()

> {
> char* ptr = PT::MakeAllocation();
> free ptr;
> }

> метод имеет вид:


> char* PT::MakeAllocation(void)

> {
> return (char*) malloc(1);
> }

> Так вот, память выделяется нормально и указатель возвращается в main, но

> после команды free указатель ptr не равен нулю. Почему?

И не должен быть равен. В задачи free не входит обнуление указателя. А память освобождается как и положено...
Хочешь чтоб он был NULL делай это ручками.

WBR, Igor Evgrafov.
Posted via RSDN NNTP Server 1.9 gamma
WBR, Igor Evgrafov
Re: Почему-то не освобождается память
От: ScorpZ Украина  
Дата: 14.10.04 13:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>из ф-ции main() вызывается статический метод класса:


А>main ()

А>{
А> char* ptr = PT::MakeAllocation();
А> free ptr;
А>}

А>метод имеет вид:


А>char* PT::MakeAllocation(void)

А>{
А> return (char*) malloc(1);
А>}

А>Так вот, память выделяется нормально и указатель возвращается в main, но после команды free указатель ptr не равен нулю. Почему?


А разве — free (void *) присваивает высвобожденому указателю NULL ,
Например delete высвобождает память , но значение самого указателя не меняет на NULL . Может и free (void *) поступает так же .
Re[2]: Почему-то не освобождается память
От: Евгений Коробко  
Дата: 14.10.04 13:58
Оценка:
Скажу больше — free не можут обнульять указатель хотя бы по той причине, что указатель передаётся по значению.
Евгений Коробко
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.