![]() |
|
Модераторы: bsa |
![]()
|
|
| notnat |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.2.2011 Репутация: нет Всего: нет |
доброе время суток!
помогите пожалуйста разобраться. пытаюсь сделать хранилище для будущих сигнатур библиотечных функций (вообще это пока просто первые 32 байта любого ехе). хранилище двухуровневое - на первом в векторе лежат по 12 байт от каждой сигнатуры, на втором - остальные 20 байт, которые будут листьями от элементов первого уровня. получается список из деревьев, состоящих из корня и нескольких листьев. ну это примитивная оптимизация, в плане что многие сигнатуры начинаются одинаково. а проблема вот в чем - в метод добавления сигнатуры подаются все 32 байта, но на первый уровень должны попасть только 12. написала метод для откусывания части строки, все вроде нормально, но после выполнения пуш_бэка строка превращается в нечто непотребное.. сначала список был реализован вручную с указателями и всем таким, думала проблема в них. переписала с вектором - то же самое.. без отделения куска строки все норм..
Это сообщение отредактировал(а) notnat - 26.2.2011, 00:53 |
||||
|
|||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
осмысленный конструктор копирования у SignatureBase есть?
|
|||
|
||||
| notnat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.2.2011 Репутация: нет Всего: нет |
мм, я думала о нем, но что-то меня остановило. так что нет
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Вы возвращаете указатель на стековый объект, который уже уничтожен. Это сообщение отредактировал(а) volatile - 26.2.2011, 01:14 |
|||
|
||||
| notnat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.2.2011 Репутация: нет Всего: нет |
спасибо, почти получилось)
Это сообщение отредактировал(а) notnat - 26.2.2011, 01:38 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Напишите еще такие функции:
SignatureBase ( const SignatureBase & sb ); const SignatureBase & operator = ( const SignatureBase & sb ); это конструктор и оператор= Рекомендую использовать не char* а, std::string Вы ведь все равно STL используете. зачем вы пишете this-> в мемберах?. (Это не ошибка просто лишнее). |
|||
|
||||
| notnat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.2.2011 Репутация: нет Всего: нет |
спасибо большое!
да, я знаю, что можно не писать |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
На конструкцию *tmpData++; должен был совершенно справедливо изругаться компилятор - вы модифицируете const объект (и заодно разрушаете входной параметр)
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
гораздо короче, проще и безопасней пользоваться std::copy или strncpy.
еще проще std::string (data, 24); Добавлено через 2 минуты и 7 секунд тогда и конструктор копирования, возможно, не понадобится Это сообщение отредактировал(а) baldina - 28.2.2011, 17:42 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
| notnat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.2.2011 Репутация: нет Всего: нет |
спасибо большое, baldina, за такие подробности! попробуем
|
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Честно говоря, странно слышать такое.. Имхо, вы ошибаетесь, *tmpData++ интерпретируется как *(tmpData++), модифицируется указатель, а константный объект на который он указывает не модифицируется. И от него берется значение, которое не используется. Да, разыменование там лишнее, только и всего. Никакой ошибки, "де юре" нет.
Это сообщение отредактировал(а) volatile - 28.2.2011, 23:31 |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
![]()
|
| Правила форума "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. |