diff --git a/esphome/components/lvgl/select/lvgl_select.h b/esphome/components/lvgl/select/lvgl_select.h index 3b1fd67d68..d4c9631073 100644 --- a/esphome/components/lvgl/select/lvgl_select.h +++ b/esphome/components/lvgl/select/lvgl_select.h @@ -59,8 +59,8 @@ class LVGLSelect : public select::Select, public Component { const auto &opts = this->widget_->get_options(); FixedVector opt_ptrs; opt_ptrs.init(opts.size()); - for (size_t i = 0; i < opts.size(); i++) { - opt_ptrs[i] = opts[i].c_str(); + for (const auto &opt : opts) { + opt_ptrs.push_back(opt.c_str()); } this->traits.set_options(opt_ptrs); } diff --git a/esphome/components/select/select_traits.cpp b/esphome/components/select/select_traits.cpp index c6ded98ebf..e5e12bdc7a 100644 --- a/esphome/components/select/select_traits.cpp +++ b/esphome/components/select/select_traits.cpp @@ -7,8 +7,8 @@ void SelectTraits::set_options(const std::initializer_list &option void SelectTraits::set_options(const FixedVector &options) { this->options_.init(options.size()); - for (size_t i = 0; i < options.size(); i++) { - this->options_[i] = options[i]; + for (const auto &opt : options) { + this->options_.push_back(opt); } } diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 91ddc70afa..660874ed1a 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -248,6 +248,8 @@ template class FixedVector { } // Allocate capacity - can be called multiple times to reinit + // IMPORTANT: After calling init(), you MUST use push_back() to add elements. + // Direct assignment via operator[] does NOT update the size counter. void init(size_t n) { cleanup_(); reset_();