![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
в чём состоит разнится между calloc и malloc?
в инете нарыл что : calloc выделяет только в продолжительных участках памяти тойсть 0.1.2.3.4.5.... а malloc'y серовно где резервить память, плюс ещё calloc заполняет массив нулями - какими нулями? обычными "0" или NULL ? что-то ещё интересно надо знать об этих двух функциях? я что-то пропустил? ![]() и на последок функция realloc - это та которая добавляет элементы, увеличивает массив. и вот мне интересно если массив я создал при помощи malloc то realloc будет увеличивать его по принципу malloc'a резервить память где попало или что? ![]() всем спасибо за ответы... |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
обе эти функции выделяют непрерывные блоки памяти. По существу отличаются они параметрами
Это сообщение отредактировал(а) Fazil6 - 30.4.2007, 22:13 |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
растянет или уменьшит если получится -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
![]() имхо в Си , что 0 , что NULL это одно и тоже - это прото выделение памяти из хипа( с мусором который был до выделения) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
ressac |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
не понял... можно поподробней? ------------------------------------------------------------------------------------------------ попутно по теме
|
||||
|
|||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
#define NULL 0
![]() ressac, мусор - то есть неважно что там было до этого, если неочищенная память, то данные будут те, что остались |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
хип это свободная память из которой динамически выделяется куски которые требуются те для работы попробуй выделить малоком кусок памяти забить его данными (тебе известными ) и освободить этот блок, и сразуже выделить точно такой же с вероятностью в 80-90 процентов данные в таком массиве даже не попортятся! дык за тем на что указывает твой указатель ты должен следить !!!! менеджер памяти здесь не причем!!!! в идеале указатель может быть приравнен к нулю и с помощью него можно будет обратится к ; гигам оперативки выделеной для воего процесса ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Насчёт нулей - как раз в плюсах это совсем ожно и тоже. В си - немножко нет. NULL имеет тип void*, а 0 - int. NULL дефайниться как: ((void*)0).
|
|||
|
||||
Samotnik |
|
||||||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
2 ressac
Вобщем, если подвести итог сказанному выше,то: malloc фция приним в качве аргумента ЧИСЛО байт, кот нужно выделить, и возвращает указатель на выделенную память. Пример
и освобождается
calloc, realloc Создают и модифицируют ДИНАМИЧЕСКИЕ МАССИВЫ. Фция calloс динамически выделяет память для массива. Она выглядит примерно так
Она принимает два аргумента: число элементов(n) , и размер каждого(size) Фция realloc ИЗМЕНЯЕТ размер обьекта, выделенного в результате malloc, calloc, realloc И самое основное, содержимое первоначального обьекта сохраняется при условии, что размер новой выделенной памяти БОЛЬШЕ , чем первоначальный!!!! Общий вид примерно такой
где p- первоначальный обьект, size - новый размер!!!!! В случаи если p=0 , то realloc работает как malloc!!!! Вод и все !!! Добавлено через 3 минуты и 41 секунду А ваще используй new delete И ни создавай себе не нужных лишних проблем!!! |
||||||||
|
|||||||||
ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
Daevaorn,
спасиб за ссылку. Romikgy, значит если я тебя правильно понял указатель может бегать по любому участку памяти? а malloc и calloc делают то что выделяют участки памяти чтоб в будущем их никто не смог занять, естественно только до выполнения free() Добавлено через 45 секунд Samotnik, спасиб, но разве массив это не тот-же указатель? Добавлено через 1 минуту и 35 секунд про new delete нам не рассказывали , они вроде только для с++ ? или нет? |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
2 ressac
Да конечно new delete везде кроме с (С++, VisualC++, MFC, Java,......) А на сичет указателей правильней будет выразиться, что указателем на блок памяти, созданным calloc можно манипулировать как массивом. Вод!!! |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Daevaorn, да, эту статью я читал. Просто у меня Visual Studio даже подсвечивает это, как макрос. Видимо теперь это одно и тоже (теперь - С++)
Это сообщение отредактировал(а) Xenon - 30.4.2007, 23:28 |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Xenon, ты программируешь на плюсах
![]() Впрочем в плюсах в скором времени будет специальное ключевое слово (nullptr, если не ошибаюсь, или типа того). |
|||
|
||||
ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
Samotnik, ну когда я делаю при помощи malloc я тоже могу манипулировать как массивом.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |