//会崩溃的写法
for(auto var = valueRow.mapValue().begin(); var != valueRow.mapValue().end(); var++)
{
if (!var.value().isValid() || var.value().isNull())
continue;
this->addItem(var.key(), var.value());
}
//不会崩溃的写法
QMap<int, QVariant> valueRow_ = valueRow.mapValue();
for(auto var = valueRow_.cbegin(); var != valueRow_.cend(); var++)
{
if (!var.value().isValid() || var.value().isNull())
continue;
this->addItem(var.key(), var.value());
}
//车祸现场
struct QMapNode : public QMapNodeBase
{
...
...
inline QMapNode *nextNode() { return reinterpret_cast<QMapNode *>(QMapNodeBase::nextNode()); }
...
...
实质上没有不同,为何会崩溃???
::组长郑涛分析:
var != valueRow.mapValue().end() 每次都会拷贝一份新的。但是var是var = valueRow.mapValue().begin()这里的拷贝。 每次拷贝都不一样造成的Beng。