我带一个指针m_room(类ServicePage中的Room * m_room,其中包含updateRoom和addService函数)
void ServicePage::updateRoom(QString _text)
{
m_room = m_reservation->findRoom(_text.toInt());
qDebug()<<m_room;
qDebug() << m_room->m_idRoom;
}
这
Room *Reservation::findRoom(int _id)
{
QVector<Room>::iterator iterator;
for(iterator = mv_addRooms.begin(); iterator != mv_addRooms.end(); iterator++)
if(iterator->m_idRoom == _id)
{
qDebug()<<_id;
Room _temp = *iterator;
return &_temp;
}
return null;
}
和qDebug之后的答案还可以,但是当我以后拿qDebug回答不同的功能时:
bool ServicePage::addService()
{
qDebug()<<m_room;
qDebug()<<m_room ->m_idRoom;
return true;
}
m_room与之前相同,但m_room-&gt; m_idRoom返回不同的值(随机值),为什么会这样?
感谢您提出任何建议。
答案 0 :(得分:6)
在findRoom()
中,您将返回指向堆栈上分配的变量的指针。
qDebug()<<_id;
Room _temp = *iterator;
return &_temp;
当函数返回时,findRoom()
的返回值指向的内存不再有效。
您可以通过简单地获取解除引用的迭代器的地址来解决这个问题:
qDebug()<<_id;
return &*iterator;
这样,您将返回指向容器中实例的指针。如果您的容器是vector<>
,请小心。如果vector<>
的大小增加,之前返回的所有指针值现在都无效。
答案 1 :(得分:0)
将_temp
声明为Room &
而不是Room
。这样,&_temp
是指向mv_addRooms中元素的指针,而不是堆栈中一个元素的副本。