30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
||||||
1 | ||||||
Чтение 3ds файла27.11.2014, 18:08. Показов 1028. Ответов 15
Метки нет (Все метки)
в общем я пытаюсь написать парсер 3ds файлов... вот для начала хотя бы массив вершин, там есть чанк CHUNK_VERTLIST в котором я сначала читаю число вершин, потом массив вершин представленных вектором (структура, не стд) 3х флоатов, я хочу заюзать для этих целей вектор (уже стд, чтоб не париться с памятью), вот я читаю:
0
|
27.11.2014, 18:08 | |
Ответы с готовыми решениями:
15
загрузка *.3ds файла Загрузка 3ds-файла Чтение чисел из файла. Чтение после конца потока невозможно Как заменить чтение строки из консоли на чтение текстового файла? |
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
27.11.2014, 18:10 | 2 |
Dark Byte, reserve выделяет память, изменяя емкость вектора (capacity), но не меняет размер. См resize.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
27.11.2014, 18:11 [ТС] | 3 |
0x10, как это выделяет память, но не меняет размер? и потом resize я тоже пробовал и тоже "out of range"
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
27.11.2014, 18:17 | 4 |
Так, стоп, что за фигня?
Где логика в использовании sizeof?
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
||||||
27.11.2014, 18:21 [ТС] | 5 | |||||
я же говорю там вектор - структура из 3х флоатов... ну вот такая:
з.ы. но они точно не пересекаются потому что нигде нет "using namespace std", т.е. стандартный вектор везде употребляю через std::vector, а этот структура вообще член моего класса
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
27.11.2014, 18:27 | 6 |
Уф, мой моск.
Резюмируя. Хочется увидеть откуда конкретно летит out_of_range.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
||||||
27.11.2014, 18:36 [ТС] | 7 | |||||
есть только одно такое маленькое предположение-опасение: там считывает что n равно 17168 (в отладчике глянул), это как бы не слишком много для вектора?))) вдруг он памяти столько не может выделить)))
0
|
0x10
|
27.11.2014, 18:43
#8
|
Не по теме: В общем, я перестаю понимать что происходит.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
27.11.2014, 18:53 [ТС] | 9 |
1. оператор [] может бросать исключения если index >= size, следовательно я предполагаю нехватку памяти... хотя не понятно с чего бы...
2. кстати странно, я посмотрел в отладчике при вызове resize capacity становится равно переданному значению... разве оно не должно выделять с запасом? в std::string точно выделяет с запасом смотрел, а тут почему то нет этого о_О 3. 0x10, возвращайся ты самый лучший хелпер на этом форуме
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
27.11.2014, 18:58 | 10 |
Во-первых, оператор[] не бросает исключений и вообще не проверяет границы. Все это делает метод at.
http://en.cppreference.com/w/c... perator_at http://en.cppreference.com/w/c... /vector/at Во-вторых, я уже сказал, что reserve не меняет размера вектора, т.е. если в конструкторе не был передан размер, если не было вызовов push_back/emplace_back, то после reserve(n) у ветора size == 0, capacity == n.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
27.11.2014, 19:02 [ТС] | 11 |
скрин ниже, я же не просто так говорю...
я сказал про resize ок да...
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
27.11.2014, 19:07 | 12 |
Dark Byte, ну это же прекрасно - Debug assertation. Значит, там, как я говорил, тупо вызов assert.
В релизной сборке этой проверки нет, т.е. программа просто упадет.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
27.11.2014, 19:09 [ТС] | 13 |
ну таки я был прав разве нет? и потом assert там или еще что мне до лампочки... почему у меня при загрузке оно вываливается???
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
27.11.2014, 19:12 | 14 |
См выше - в релизной сборке проверки нет, это только для отладки.
Обращение к нулевому элементу вектора с размером 0.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
27.11.2014, 19:15 [ТС] | 15 |
я же сказал с resize ошибка тоже вываливается
Добавлено через 2 минуты хотя стоп... мистика какая то, прошла ошибка отвечаю с resize тоже была, а теперь вдруг раз и нету...
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
27.11.2014, 19:17 | 16 |
Ну я предупредил, что не очень воспринимаю информацию сейчас.
Если речь о примере из 11 поста, то там тоже все понятно: обращение к 10 элементу вектора с размером 10, когда последний индекс - 9. Если где-то в другом месте - нужно смотреть колстек. На обращении к какому элементу срабатывает ассерт, какой при этом фактический размер вектора. Перемещаться по стекфреймам в студии можно нажав "повтор" на появившемся от ассерта окне.
0
|
27.11.2014, 19:17 | |
27.11.2014, 19:17 | |
Помогаю со студенческими работами здесь
16
Чтение файла, чтение названия папки где находится файл, запись данных на PHP Чтение заголовка PCX файла и чтение растровых данных PCX файла Чтение файла CSV и чтение из Table View Чтение бинарного файла - чтение первых 9 байт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |