В этом примере кода есть две проблемы:
Первый:
Контейнер my_list
еще не был инициализирован.Строка
my_list.value(i).push_back(result);
фактически не помещает значения в контейнер (как мы могли бы надеяться).
В вашем коде i
всегда выходит за пределы.(Поскольку my_list
всегда будет иметь размер 0.) В результате и в соответствии с документацией ,
Если индекс i выходит за пределыПосле этого функция возвращает значение по умолчанию .
Поскольку это значение по умолчанию нигде не назначено, оно, скорее всего, будет выделенов куче и оставайтесь сидеть там до разрушения.
Дальнейшие обращения к my_list
, такие как qDebug() << my_list.value(i).size()
, по умолчанию создадут другой QList (поскольку, опять же, i
выходит за пределы).
Убедитесь, что у вас уже есть QList<int>
, готовый к отправке значений.
Секунда:
Метод value()
возвращает константную ссылку на QList, которыйне разрешает модификацию (то же самое для at()
).Если вы хотите отправить значения в QList, вы должны использовать []
вместо value()
метода.
Следующий код делает то, что вы хотите:
for (int i = 0; i < 2; ++i) {
my_list.push_back(QList<int>()); // first appends a new QList at index `i`
for (int j = 0; j < 4; ++j) {
result = i * j;
my_list[i].push_back(result); // safely retrieves QList at index `i` and adds an element
}
}