Fixed bug with obsolete byte address items not being removed (off-by-one error)

This commit is contained in:
Nav
2021-10-30 14:46:57 +01:00
parent fab849016f
commit cc83f39524

View File

@@ -18,9 +18,9 @@ void ByteAddressContainer::adjustAddressLabels(
) { ) {
static const auto margins = QMargins(0, 10, 0, 0); static const auto margins = QMargins(0, 10, 0, 0);
const auto rowCount = byteItemsByRowIndex.size(); const auto newRowCount = byteItemsByRowIndex.size();
const auto addressLabelCount = this->addressItemsByRowIndex.size(); const auto layoutItemMaxIndex = static_cast<int>(this->addressItemsByRowIndex.size() - 1);
const auto layoutItemMaxIndex = static_cast<int>(addressLabelCount - 1);
for (const auto& mappingPair : byteItemsByRowIndex) { for (const auto& mappingPair : byteItemsByRowIndex) {
const auto rowIndex = static_cast<std::size_t>(mappingPair.first); const auto rowIndex = static_cast<std::size_t>(mappingPair.first);
const auto& byteWidgets = mappingPair.second; const auto& byteWidgets = mappingPair.second;
@@ -45,9 +45,11 @@ void ByteAddressContainer::adjustAddressLabels(
); );
} }
if (rowCount > 0 && rowCount > byteItemsByRowIndex.size()) { // Delete any address items we no longer need
const auto rowCount = static_cast<int>(byteItemsByRowIndex.size()); const auto addressItemCount = this->addressItemsByRowIndex.size();
for (std::size_t i = rowCount - 1; i >= rowCount; i--) {
if (newRowCount > 0 && newRowCount < addressItemCount) {
for (auto i = (addressItemCount - 1); i >= newRowCount; i--) {
delete this->addressItemsByRowIndex.at(i); delete this->addressItemsByRowIndex.at(i);
this->addressItemsByRowIndex.erase(i); this->addressItemsByRowIndex.erase(i);
} }