c++ - 同一个指针的不同值

标签 c++ qt pointers

我取一个指针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/

相关文章:

c++ - 无法识别 NSIS 插件功能

c++ - 在 MSYS2 上安装和使用 arm-none-eabi-gcc

c++ - 是否可以在 extern "C"函数中使用模板参数

c++ - 为什么我的无锁消息队列段错误 :(?

c++ - 使用 Qt 解析 JSON 数组

c - 为什么指向数组的指针的 %d 给我数组的第一个元素?

qt - 错误: expected declaration specifiers before ‘namespace’

c++ - 如何防止非事件 QMdiSubWindows 最大化

c++ - 专门用于指针的模板

function - 过程指针不能指向基本函数