![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Syberex |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
есть трабла на это компиль ругается
char *mass; mass=malloc(50); // не может преобразовать void to char mass=realloc(mass,150); // не может преобразовать void to char free(mass); не знаю чего??? необходимо выделить память, а потом увеличить её.Если интерестно тоже самое с new , ну типа char *mas=new char[100]; типа увеличить mas=оператор char[500]; как? --------------------
whole power in artificial intelligences |
|||
|
||||
| Kuvaldis |
|
||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Syberex,
нужно так
Но так, как ты сделал, плохо. Во-первых, нет проверки на выделение. Во-вторых, при использовании realloc() есть один неприятный подводный камень. данная функция возвращает NULL, если память выделить не удалось. Предположим, что для указателя mass память выделилась и в ней сидят данные. После оператора mass=(char*)realloc(mass,150); происходит утечка памяти, так как указатель на старые данные затирается. Здесь нужно делать так (используем промежуточный указатель)
ASFAIK, для операторов new и delete нет аналога функции realloc(). Если очень нужно, то придется самому ее написать Это сообщение отредактировал(а) Kuvaldis - 4.10.2006, 14:00 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||
|
|||||
| Syberex |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
char *mass;
mass=(char*)malloc(50); mass=(char*)realloc(mass,150); free(mass); это пашет чётко, сенкс, значит и такое должно пахать long *mass; mass=(long*)malloc(50); mass=(long*)realloc(mass,150); free(mass); Да??? а что действительно нет, для new такого? --------------------
whole power in artificial intelligences |
|||
|
||||
| Kuvaldis |
|
||||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Syberex,
1. для красивости кода используй кнопку "код" при вводе сообщения (выбери в выпадающем меню нужный язык) 2.
Да 3.
As far as I know -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||||
|
|||||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
на одном из форумов посоветовали перейти на вектора
Добавлено @ 14:35 в подтверждение с http://www.codeproject.com/tips/newandmalloc.asp
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Oleg_Ci |
|
||||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 3 Всего: 30 |
Тогда это что ?
Тогда память увеличивать и уменьшать так надо
|
||||
|
|||||
| Kuvaldis |
|
||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Олег4,
То, о чем ты написал, правильно, но ты меня не понял. Повторяю еще раз: realloc() возвращает NULL в том случае, если память выделить не удалось. в операторе
как правило а2 и а1 будут указывать на одно и то же место, при условии, что изменение памяти не очень велико. Думаю ,что ты знаешь, что компилятор ищет самый подходящий кусок памяти для запроса. Т.е. наименьший из возможных. Если вдруг нам захочется выделить память большего размера, то уже выделится память в новом месте (старые данные при этом будут скопированы и старая память освобождена) Попробуй выделить памяти побольше 2. я не совсем корректно, возможно, свой пример обработал, забыл многоточие поставить. Нужно так:
P.S. Если на отступы смотреть, то так оно и было СУВ Это сообщение отредактировал(а) Kuvaldis - 26.10.2006, 16:50 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Компилятор С++? Тогда да. Другой вопрос, зачем в С++ использовать malloc? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
MAKCim, а ты начало читал?
человек спрашивал, есть ли возможность делать с new тоже что и с malloc делает realloc -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
не до конца
нет -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| Gwendolen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
А может стоит использовать кучи?
--------------------
Наносите пользу и причиняйте добро! |
|||
|
||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
Gwendolen, malloc/new и использует heap
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Как всегда в таких случаях говорят - используй std::vector
|
|||
|
||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |