![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Zakhar_Shan |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 14.6.2007 Где: Тюмень Репутация: 1 Всего: 2 |
Есть программка которая с бинарного файлика считывает данные. Тип данных не известен. Пока не дойдешь до секции файла, где и будет содержаться инфа о типе содержащихся данных. Для каждой секции файла, программка создает объект класса, и вписывает туда значения, так как тип изначально не известен то в классе массив значений определен как:
После того, как тип дальнейших данных выясняется, массив vals, определяется под конкретные данные:
В случаях с intType, realType и doubleType все норм. А вот когда дело касается charType, все плохо. Данные типа char в файлике это записи по 8 символов (константа BYTES_IN_CHAR=8). При определении считывание значения в класс, оно пишется при помощи метода:
а считывается:
Так вот, в defineCharVal приходит нормальное значение, а вот считывается фигня... Помогите плиз, что может быть не так? Ведь с другими типами все норм... |
||||||||
|
|||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
т.к. память выделяется жёстко под BYTES_IN_CHAR байт,
а запись (и чтение) м.б. больше то всё это будет работать только если ind == 0. Во всех остальных случаях м.б. всё что угодно -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Из приведённого кода мало, что понятно. Но, во-первых, при считывании файла, обычно, используют не void *, а char *. Во-вторых, используй memcpy вместо своих подозрительных циклов.
-------------------- ![]() |
|||
|
||||
| Zakhar_Shan |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 14.6.2007 Где: Тюмень Репутация: 1 Всего: 2 |
На сколько я понимаю, запись
равносильно выделению памяти count * BYTES_IN_CHAR. т.е. для count=10 и BYTES_IN_CHAR=8 выделится 80 байт? Добавлено через 2 минуты и 1 секунду
memcpy копирует с 0 элемента массива, если можно было бы копернуть с n-го... Цены бы не было... |
||||||
|
|||||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
да. всё правильно. я не усмотрел этот count (давно не пользуюсь calloc)
вообще-то, в коде не видно особых проблем. поставь assert( ind <= count ), что-ли... или выкладывай весь код -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
| Zakhar_Shan |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 14.6.2007 Где: Тюмень Репутация: 1 Всего: 2 |
Да код весь смысла нет выкладывать, даже не знаю что может там пригодиться... Могу сказать, сто методы:
и
Работают адекватно... |
||||
|
|||||
| Zakhar_Shan |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 14.6.2007 Где: Тюмень Репутация: 1 Всего: 2 |
Ошибку нашел
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |