![]() |
|
![]() ![]() ![]() |
|
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
Нет ли каких либо ограничений на одновременное (в одной программе) использование new/delete и GetMemory/ReallocMemory/FreeMemory?
Дело в том, как только я применил ф-цию ReallocMemory к памяти, выделенной с помощью GetMemory, удаление с помощью delete независимого массива, существующего и созданого с помощью new char[256] стало приводить к исключению Access Violation. Код приведу по необходимости... сложноват (как по мне) |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 4 Всего: 162 |
||||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
поподробнее можно?
есть урлы по теме? |
|||
|
||||
LastAngel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 18.4.2008 Репутация: нет Всего: нет |
с помощью delete можно удалять только память выделенную по new , также и malloc/free
|
|||
|
||||
Woodoo |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
Вы не поняли вопроса Добавлено @ 11:40 иду дальше... глюк обнаружился, но тема остаеться актуальной P.S.: Кому интересно ошибка как всегда была глупейшая, не повторяйте!!! ![]()
Это сообщение отредактировал(а) Woodoo - 21.5.2008, 11:48 |
||||
|
|||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 1 Всего: 36 |
||||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 4 Всего: 162 |
И лучше, и впраду, юзать std::string или другие классы строк. |
|||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
![]() Давайте оставим предпочтения в покое. Я думаю каждый сам может решить что ему юзать. Тема все еще открыта! Может кто-нибудь внятно и толково объяснить ПОЧЕМУ нельзя использовать тему вместе? Может все же можно... как убрал косяк все заработало как часы... |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 1 Всего: 36 |
если в документации сказано что память выделенную GetMemory можно освобождать через delete - тогда можно. не сказано - значит нельзя. смекаешь?
|
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: нет Всего: 5 |
Вообще лудше пользоватся new/delete!так как они не только выделяют/освобождают память, но также вызывают конструкторы/деструкторы, а также new - позволяет обработать исключение, когда по каким - то причинам нельзя выделить необходимый обьем памяти в куче!
Это сообщение отредактировал(а) Graf_h - 21.5.2008, 15:20 -------------------- Иногда переменная - это просто переменная |
|||
|
||||
LastAngel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 18.4.2008 Репутация: нет Всего: нет |
Их можно вместе юзать( какая разнца каким методом ты выделишь из кучи область памяти), нельзя выделять одним методом удалять другим ... Про исключения Graf_h прав Это сообщение отредактировал(а) LastAngel - 21.5.2008, 15:23 |
|||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
я не являюсь новичком в программировании и не хотел бы чтобы форумчане тратили свои силы на объеснение того, что: new вызывает конструктор/деконструктор, также генерирует исключение, освобжать память - только delete, для malloc - free, GetMemory - FreeMemory... последнии заместо исключения возвращают NULL при неудачи.
чтобы не возникло недорозумений. пример кода:
lack of documentation on GetMemory/ReallocMemory/FreeMemory :( |
|||
|
||||
LastAngel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 18.4.2008 Репутация: нет Всего: нет |
delete [] a; надо
если не совсем забыл, то delete a; удалит указатель на область выделенной памяти при этом сама выделенная память будет висеть в куче без доступа к ней, а delete [] удалит всё нафих Это сообщение отредактировал(а) LastAngel - 21.5.2008, 16:05 |
|||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
жжоте таварисч!
"a" у миня как бя вообще стековая переменная ![]() в любом случае ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 18 Всего: 154 |
я в ауте, товарисчь Woodoo, вам руским языком на С++ написали
и как это побороть происходит здесь вот что:
как побороть уже написали, строку в а нужно скопировать через strcpy malloc/free, new/delete - можно использовать в одной программе, но только для разных блоков памяти, то что создали через new должно быть удалено через delete, и аналогично для malloc/free Добавлено через 55 секунд и да, нужно удалять через delete[], так как new[]... |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Использовать new/delete, new[]/delete[], GetMemory/ReallocMemory/FreeMemory в одной программе можно, хотя бы потому что можно объединять С и С++ модули в одном проекте.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
2Товарисч Lazin:
Читайте внимательней посты Во втором же своем посту я косяк нашел, и просто напросто о нем сообщил. Далее:
корректный код, который удалиь созданый ранее массив, так как "a" - указатель на него далее, читайте мой пост о просьбе не тратить попусту силы на объяснение элементраных вещей. 2Alexeis: Конструктивно. Respect. Тема закрыта. |
|||
|
||||
LastAngel |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 18.4.2008 Репутация: нет Всего: нет |
с код гуардом прогони этот "правильный код" ![]() |
||||
|
|||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
2LastAngel:
Сразу прошу прощения за критику но: название темы читал? перед твоим пост читал? создаешь много офтопа. Тема ЗАКРЫТА. P.S.: развили демогогию... все тема должна была состоять из 2ух постов: Woodoo: можно параллельно юзать new, GetMemory и malloc? Alexeis: да ... это еще не начали доказывать, что new лучше чем malloc, и char * по сравнению с AnsiString отстой ![]() |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 18 Всего: 154 |
это некорректный код ![]() Добавлено через 2 минуты и 6 секунд некорректный он по 2-м причинам, одну назвали, вторая - этот код не безопасен и может привести к утечке памяти ![]() |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 4 Всего: 162 |
По третьему разу: удаление с помощью "delete" памяти, выделенной с помощью "new[]" - ошибка. Что не ясно? |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 1 Всего: 36 |
||||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
Представте себе!!! Код преведенный мной РАБОТАЕТ КОРРЕКТНО. Скомпилируйте следующий код и откройте деспетчер задач
Граждане, уважаемые! Будте благоразумны и адекватны! Создайте новый топик и обсуждайте где там в память куда утекает! Автора темы данный вопрос не интересует! Интересующая информация давным давно получена! Не стои более писать "По третьему разу:", "По четвертому разу:" Т Е М А З А К Р Ы Т А |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Woodoo, тем не менее правильно будет так
Подобная ошибка иногда приводит к краху программы. Все зависит от компилятора, если компилятор шибко умный, то он может и сам сообразить, что вместо delete p; нужно подставить delete[] p; , но на самом деле удаление массива delete p; является недопустимым и приводит к непредсказуемым последствиям. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 1 Всего: 36 |
||||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
админ, не дайте плиз еще сотни пользователям высказаться что правильно писать delete[], представте себе я это знаю!
ыыы... можно какнить удалить тему? |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 4 Всего: 162 |
Ну хорошо, что знаешь. Правда, до этого в трёх своих постах ты почему-то говорил другое. Я считаю, что тема очень показательна. Так что пускай висит. З.Ы. У нас здесь не балаган, поэтому будь добр выражаться технически грамотно, и, по возможности, с наименьшим количеством орфографических ошибок. |
|||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
Я писал, что код работает корректно... то что это правильная запись я не писал.
"З.Ы. У нас здесь не балаган..." - ага, у нас тут сплошной оффтоп! Советовал бы внимательней читать оставленные сообщения, перед тем как оставлять мнение |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 4 Всего: 162 |
Корректно - значит по спецификации. А у тебя код работает ожидаемо по стечению обстоятельств (особенности реализации низкоуровневых функций new/new[]/delete/delete[], на которые полагаться нельзя). Кроме того, в случае не-POD типов данный код ведёт к утечкам памяти. |
|||
|
||||
Woodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2006 Где: Севастополь || Ял та Репутация: нет Всего: нет |
JackYF, сколько можно!? Не будьте столь навязчевы! Нельзя же зарабатывать Ваше колличество сообщений таким образом! Будте конструктивны! Т.е. по делу... т.е. по теме... а тема... сами видите.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |