Fryazino.NET Forum || Hard&Soft || realloc malloc HELP!
>> Привет, Гость! Войдите! : вход | поиск | правила | банлист
Автор
realloc malloc HELP! (1) 1 для печати | RSS 2.0
Vovan
Korab STARshiy
Крутой народ в Си подскажите следующую вещь плиз:
есть некое динамическое выделение памяти для массива, к примеру:

int *a;
a = (int*)malloc(50*sizeof(int));

а в итоге используется только первых 20 элементов.

нужно высвободить неиспользованную память под 21-50 элемент.

Можно в принципе так:
a = (int*)realloc(a,20*sizeof(int));//20-это как раз используемые элементы.

Только при этом, на сколько я понимаю, происходит выделение памяти в другом месте и туда происходит копирование этих 20 элиментов, а та память высвобождается.

Или же realloc сам там по умному или другой блок выделяет(если больше) или укорачивает текущий блок, но не выделяет в другом месте (если меньше).

??????????????

ps если никто не даст ответа в течении суток - сам в исходники полезу

[Сообщение изменил Vovan 04-08-2002.]

IP
ScREAM
Участник
(2B)||(!2B) вот в чем вопрос
To Vovan
void *realloc(void *ptr, size_t size);
Работа функции realloc в С99 отличается от работы в С89, хотя конечный результат одинаков.
В С89 функция изменяет размер блока выделенной памяти делая в нем size элементов, а в C99 эта же функция высвобождает адресуемый блок памяти, а вместо него освобождает новый, в котором сохранены покрайней мере пкрвые size байт.Функция возвращает некоторый указатель, причем указатель переданный МОЖЕТ совпадать с указателем возвращаемым.

выходит я крутой народ в СИ
IP
ScREAM
Участник
(2B)||(!2B) вот в чем вопрос
а вот еще дополнение
в с89 ф-ция может действовать так же как и в с99 если новый размер больше и требуется переместить блок памяти.
IP
Vovan
Korab STARshiy
крутой-крутой!

а может ты тогда знаешь какая реализация realloc в VC++ 6.0?

IP
SparkMan
Участник
1532
To Vovan
Не надо расчитывать на какойто вариант реализации. Пиши исходя из худших предположений. тогда при переносе исходников программы не придется искать лишние глюки.
IP
ScREAM
Участник
(2B)||(!2B) вот в чем вопрос
To Vovan
да это в книжке написано.
а какая реализация я не знаю
хотя скорее с89, тк с99 введен с 1999 года а vc++6.0 выпущен в 98
IP
ScREAM
Участник
(2B)||(!2B) вот в чем вопрос
вот короче.
если неявный инт не работает то это с99.надеюсь сказал про то что ты спрашивал.

[Сообщение изменил ScREAM 04-08-2002.]

IP
Страницы(1): 1

Хотите создавать темы и отправлять сообщения? Выполните Вход или Зарегистрируйтесь!




Напишите нам

µƒorum © fryazino.net