![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Gwendolen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
Вопрос таков:
Будет ли уничтожена строка CHAR*, ( LPTSTR), а также CHAR chBuffer[buffLen] при выходе ее из зоны видимости? Для работы со строками использую только WinAPI: lstrcpyn, lstrcat и т.д. Есть ли необходимость в деструкторе строк для предотвращения утечки памяти ![]()
--------------------
Наносите пользу и причиняйте добро! |
|||
|
||||
witeman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 29.3.2005 Где: г.Тюмень Репутация: нет Всего: нет |
Смотря куда указывает char* - если указатель ссылается на динамическую строку,
а значит при выходе из области в которой ты его объявил, ты не сможешь к нему обратиться, но при этом память выеленная с помощь new, будет по-прежнему "зарезервированна". |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
char buffer[bufflen] - да - это (скорее всего) автоматическая переменная. char* - в общем случае нет. Смотря как инициализируется char*: если char* pstr = new char[buflen], то ты обязан явно вызывать деструктор (delete), если char* pstr = "любая строка", то никакой утечки памяти не будет - это просто указатель на статическую память (скоре всего, но может быть и на автоматическую. В любом случае, не твоя забота.) HeapFree нужно (и можно!) вызывать только для указателя, который получен через HeapAlloc, иначе порушишь heap. -------------------- ... |
|||
|
||||
Gwendolen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
Выделение памяти на совести WinAPI.
Написал тестовое приложение:
Погонял 80000 циклов, диспетчер задач приращения памяти не показал. --------------------
Наносите пользу и причиняйте добро! |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Наоборот, ему жутко не повезло. Представь себе, что это часть большого проекта, и до одного прекрасного момента все вроде работает. А потом изменяется какой-то дальний кусок кода, а про этот он уже и думать забыл... Функции strcpy просто пишут байты по указанному адресу, и им абсолютно по барабану, что там было до того... -------------------- ... |
|||
|
||||
Gwendolen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
Понял, вопрос решен - буду выделять память, а потом освобождать. Тогда и утечек не будет
![]() А теперь внесу изменения в разрабатываемый мною проект... --------------------
Наносите пользу и причиняйте добро! |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Gwendolen, Вообще для таких тестов неплохо еще и библиотечку efence подключать. - Она следит за корректностью работы с памятью. В случае с lstrcpyn отвалилось бы сразу.
P.S. Хотя пользуюсь ей только под никсами и даже не знаю, есть ли у нее версия под винды (что-то аналогичное по-любому должно быть). Если что - попинайте. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |