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

Ваш аккаунт

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

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

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

malloc & free

2.6K
02 мая 2005 года
NinthBit
43 / / 31.01.2005
Делается объявление:
 
Код:
char* str = (char *)malloc(MAXSTR);

Далее идет работа со строкой как с буфером.
Но при попытке
 
Код:
free(str);

Выдается ошибка типа
 
Код:
"Access violation at adress ... in module 'BORLANDMM.DLL'. Read of adress ...

Причем, как-то раз проблема решилась присвоением непосредственно перед освобождением :
 
Код:
str="";

Но в этот раз такой вариант не дает никаких результатов ...
4
02 мая 2005 года
mike
3.7K / / 01.10.2002
Целиком код приведи. А еще лучше посмотри адрес, по которому выделяется память, и по адрес, который ты передаешь функции free.

Они наверняка не совпадают.

Так делать нельзя:

 
Код:
char *str=malloc(...);
str="";
free(str);


так тоже нельзя:

 
Код:
char *str=malloc(...);
str++;
free(str);


вот так нужно:

 
Код:
char *str=malloc(...);
char *str1=str;
str1++;
free(str);
2.6K
03 мая 2005 года
NinthBit
43 / / 31.01.2005
Спасибо, mike!

Ошибка была действительно в том, что указатель инкрементировался.

Однако не совсем понял, почему нельзя делать так:
 
Код:
char *str=malloc(...);
str="";
free(str);


Ведь здесь же вроде адрес исходного указателя не изменяется ...
376
04 мая 2005 года
Absolut
220 / / 22.11.2002
Цитата:
Originally posted by NinthBit
Спасибо, mike!

Ошибка была действительно в том, что указатель инкрементировался.

Однако не совсем понял, почему нельзя делать так:
 
Код:
char *str=malloc(...);
str="";
free(str);


Ведь здесь же вроде адрес исходного указателя не изменяется ...


Как это не меняется !?! А что по-твоему происходит при

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