我取一个指针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->m_idRoom 返回不同的值(随机值),这是为什么?
感谢您的任何建议。
最佳答案
在findRoom()
,您将返回指向分配在堆栈上的变量的指针。
qDebug()<<_id;
Room _temp = *iterator;
return &_temp;
findRoom()
的返回值指向的内存函数返回时不再有效。
您可以通过简单地获取取消引用的迭代器的地址来解决这个问题:
qDebug()<<_id;
return &*iterator;
这样,您将返回指向容器中实例的指针。如果您的容器是 vector<>
,请小心.如果vector<>
大小增加,之前返回的所有指针值现在都无效。
关于c++ - 同一个指针的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308169/