同一指针的不同值
different values for the same pointer
本文关键字:指针 更新时间:2023-10-16
我取一个指针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<>
的大小增加,那么之前返回的所有指针值现在都无效。
将_temp
声明为Room &
而不是Room
。这样,&_temp
是指向mv_addRooms中某个元素的指针,而不是堆栈中某个的副本。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错