Я не могу воспроизвести ваш случай, но я могу привести вам пример, иллюстрирующий проблему
QFuture<void> test ()
{
QVector<int> v; // LOCAL VARIABLE IN SCOPE OF test FUNCTION
// preparing v vector
QFuture<void> f = QtConcurrent::map(v,someFunction); // returns immediately
return f;
}
[1] QtConcurrent::map
занимает v
по ссылке NOT BY COPY.
[2] QtConcurrent::map
немедленно возвращается.
[3] Таким образом, когда функция test
заканчивается, параллельные операции, запускаемые map
, используют вектор v
, который был удален, поскольку он является локальной переменной в функции test
.
Вы можете использовать waitForFinished
для QFuture
, но тогда ваша функция не имеет смысла, потому что она блокируется до завершения параллельной задачи.