Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
-11 / 0 / 1
Регистрация: 02.09.2015
Сообщений: 76

Беда с resize() для vector<uint8_t>

19.02.2025, 14:33. Показов 4020. Ответов 20

Студворк — интернет-сервис помощи студентам
В коде использую несколько векторов. В описании класса перечисляю указатели на них так:

C++
1
2
3
vector<bool>           *pLedStates = nullptr;
vector<Color_struct>   *pLedColors = nullptr;
vector<uint8_t>        *pNZR       = nullptr;
В конструкторе создаю для них собственно векторы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WS2812B::WS2812B (uint16_t LedStripSize, PeriphTypeEnum PeriphType, uint8_t PeriphNumber, PinRemapEnum PinRemap, BlinkStatusEnum BlinkStatus, uint8_t BlinkTIMERx):
 
  pWS2812B            (this),
  NumberOfLeds        (LedStripSize),
  NumberOfReset       ((LedStripSize<4) ? 0 : (LedStripSize%3) ? (LedStripSize/3) : (LedStripSize/3 - 1)), 
  PeriphAddr           (0),
  DmaAddr              (0),
  DmaCh                (0),
  NzrArrSize           (0),
  NumberBytesForOneLed (0),
  NumberBytesForReset  (0),
 
  //---ВОТ ОНИ !!!-------------------------------------------------------------//
  pLedStates           (new vector<bool>(LedStripSize)),
  pLedColors           (new vector<Color_struct>(LedStripSize)),
  pNZR                 (new vector<uint8_t>),
  //------------------------------------------------------------------------------//
  LedMask              (0)
{
;
//...//
}
В коде программы для векторов делаю resize(). В частности для pNZR делаю это дважды. После первого pNZR->resize(119) в отладке наблюдаю такое:

По адресу __begin_ 0x20000248 будет лежат первый элемент вектора. Далее заполняю вектор, в памяти смотрю данные и всё там ОК: первый элемент лежит по адресу 0x20000248. Работаю с данными - всё замечательно.

Затем мне снова надо сделать pNZR->resize(131), было 119 элементов, а хочу 131:

По адресу __begin_ 0x00000000 как бы должен лежать первый элемент, но адрес не должОн быть таким. Далее в коде при заполнении вектора первый элемент по этому адресу, конечно, отсутствует и код, соответственно, шлёт меня подальше.

ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО?

P.S.:
С другими векторами делаю подобное, но такого не происходит, resize() делается как положено. Делал также несколько раз - всё работает.
Пробовал для pNZR делать перед вторым resize() вот так: pNZR->capacity(). Возвращалось значение 119.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2025, 14:33
Ответы с готовыми решениями:

Для чего в данном коде vector.resize()
for(size_t i = 0; i &lt; row; ++i) { imatrix.resize(col); for(size_t j = 0; j &lt; col; ++j) imatrix =...

resize и vector
что делает функция resize в vector? ну например ...... ...... vector&lt;int&gt;tin; ..... ..... tin.resize(n);?

Vector::resize
Можно ли где-то найти код этой функции?

20
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
19.02.2025, 18:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Alexey9891 Посмотреть сообщение
Затем мне снова надо сделать pNZR->resize(131), было 119 элементов, а хочу 131:
Вложение 1502319
По адресу __begin_ 0x00000000 как бы должен лежать первый элемент, но адрес не должОн быть таким. Далее в коде при заполнении вектора первый элемент по этому адресу, конечно, отсутствует
Нулевой указатель внутри вектора после resize - это странно. Есть подозрение на то, что вас обманывает отладчик и данные, которые вы видите, не соответствуют действительности. Но скорее всего дело не в этом, а в том, что вы что-то недоговариваете. Однако без кода ничего осмысленного сказать нельзя.

Цитата Сообщение от Alexey9891 Посмотреть сообщение
и код, соответственно, шлёт меня подальше.
Что это за чушь? Что это значит? Где подробное описание того, что именно происходит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2025, 18:56

STL::vector (метод resize)
Здравствуйте ,у меня возник один вопрос по поводу метода resize() ... Вот пример кода if (arr.empty()) //Если...

Непонятная ошибка при вызове std::vector::resize
Недавно заметил непонятную ошибку при вызове метода resize(); Я так и не понял как правильно создавать таблицы с динамически...

vector в структуре: возможно?
могу ли я, объявляя структуру, написать так: struct A { vector&lt;char&gt; v; ......... }; ?

Рандомный выбор элементов vector-а
есть вектор vector&lt;string&gt; s =&quot; a1a, a2a, a3a, a4a, a5a&quot; как мне сделать рандомный выбор допустим 2 подстрок, что бы на выходе получить...

"Преобразование" из uint8_t в byte []
Здравствуйте, такой вопрос Нужно преобразовать значение из uint8_t в массив byte То есть: Дано uint8_t s; byte d; s=15; (в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru