我有以下Qt代碼,其中段錯誤next()
。我看着QtConcurrent
的代碼,它對我來說並不明顯,爲什麼它失敗了。QFutureIterator :: next segfaults
namespace {
std::tuple<QString, std::exception_ptr> test(const int& data) {
return std::make_tuple(QString(), std::exception_ptr());
}
}
void
start() {
QVector<int> downloadList;
downloadList.push_back(1);
downloadList.push_back(2);
auto future = QtConcurrent::mapped(downloadList, test);
QFutureIterator<std::tuple<QString, std::exception_ptr>> it(future);
while(it.hasNext()) {
auto& tuple = it.next();
}
}
失敗的一點是:
const T *pointer() const
{
if (mapIterator.value().isVector())
-> return &(reinterpret_cast<const QVector<T> *>(mapIterator.value().result)->at(m_vectorIndex));
else
return reinterpret_cast<const T *>(mapIterator.value().result);
}
更新:
爲QFuture::const_iterator
死機一樣。
注:
如果我能相信GDB,this
在QVector::at
是0x0
。那麼我假設mapIterator.value().result
已經是nullptr
,爲什麼,我不知道。
只是問......你確定你可以在QFuture完成之前在QFuture上使用迭代器嗎? – peppe
根據[doc](http://harmattan-dev.nokia.com/docs/library/html/qt4/qfutureiterator.html#details),是的。 – abergmeier