【问题标题】:C++ Queue error [closed]C ++队列错误[关闭]
【发布时间】:2016-05-07 02:33:53
【问题描述】:

这是我的队列声明

// TODO: Declare a queue here - e.g. as a global variable
queue<string>myQueue;

这就是我认为我的问题所在。每当我运行程序时,我都会收到一条错误消息,指出“deque iterator not dereferencable”。

string receiveMessage()
{
    string messageValue = noMessage; // Don't change this value unless there is a message - default is improtant

    messageQueueMutex.lock();
    try
    {
        // TODO: Set hasMessages to true if your queue is not empty, otherwise set it to false:
        if(!myQueue.empty())
        {
            bool hasMessages = true;
        }
        else
        {
            bool hasMessages = false;
        }

            // TODO: Remove the first message from your queue and place it in messageValue:
            messageValue = myQueue.front();
            myQueue.pop();

    }
    catch (...)
    {
        cout << "Exception occurred - check your code!" << endl;
    }
    messageQueueMutex.unlock();

    return messageValue;
}

【问题讨论】:

    标签: c++ queue deque


    【解决方案1】:

    这里不需要使用unlock()std::mutex超出范围会自动解锁。此外,hasMessages 在 if-else 语句 b/c 之后将不可访问,它在 if-else 语句的范围内声明。所以,你需要这样做:

    bool hasMessages;
    
    if(!myQueue.empty())
    {
        hasMessages = true;
    }
    else
    {
        hasMessages = false;
    }
    

    【讨论】:

      【解决方案2】:

      如果队列为空,此代码仍会尝试从队列中移除第一个元素。如果你不相信我,就ask your rubber duck

      当然,这是未定义的行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 2015-02-01
        • 2015-12-01
        • 1970-01-01
        相关资源
        最近更新 更多