![]() |
|
Модераторы: bsa |
![]()
|
|
| vitalyisaev2 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.9.2010 Репутация: нет Всего: нет |
Уважаемые друзья, почему динамический массив char * zeroBuffer после явного удаления себя в конце каждой итерации цикла и объявления заново сохраняет свои прошлые значения
(тот же * counterBuffer ведёт себя нормально - забывает себя в каждой итерации)? char * zeroBuffer должен быть заполнен небольшим количеством нулей, но он дописывает к старому всё новые и новые нули, в результате переполняется стек (?)
Вот что пишет отладчик:
программа на этой итерации уже вылетает:
|
||||||
|
|||||||
| disputant |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 28.11.2011 Репутация: нет Всего: 3 |
Что вы с ними (массивами) делаете еще?
Похоже, что память все же портится где-то в другом месте. А что до "помнит себя" - так оператор new вроде бы память не обнуляет, так что если выделится тот же кусок памяти - вот и "запоминание"... |
|||
|
||||
| vitalyisaev2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.9.2010 Репутация: нет Всего: нет |
Вся работа с памятью, которая вызывает проблемы, происходит внутри большого цикла for (int i = 1000; i < 100000; i+=1000)
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
В принципе, должна вылететь. Посмотрите сюда:
Тоже самое, используется strcat, а массивы не завершены нулями. В конце концов, Вы используете C++, так для строк используйте std::string, ошибки с завершающим нулём уйдут. Правда, могут появиться другие))) Если же Вам так милы C-style strings, то Вы обязаны хранить в конце строки символ '\0', не говоря о том, что под него тоже нужно резервировать память. Память-то у Вас, вроде, под '\0' резервируется, а вот '\0' нигде не участвует, например: Хотя, конечно, код ещё пилить и пилить. Отказывайтесь Вы от этих бесконечных strcat и strcpy... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Я думаю тут с большой вероятностью будет возникать выход за границы массива. А если честно весь код мутно не понятный и неизвестно что пытается сделать. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Dem_max, не будет. iLength начинается с 4, поэтому в zeroBuffer место ещё и останется на '\0'.
Код генерирует последовательность файловых имён вида
Это сообщение отредактировал(а) feodorv - 1.3.2013, 20:40 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
| vitalyisaev2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.9.2010 Репутация: нет Всего: нет |
Всем огромное спасибо за замечания.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |