访问冲突读取位置0x012DEFFC。 C ++

时间:2014-07-19 01:09:07

标签: c++ pointers visual-studio-2013 stack

每当我调用出队功能时,

在视觉工作室的标题中出现错误。 pop函数适用于堆栈,但是当它涉及队列时它不起作用并且在调试时出现错误。

在queue.cpp中

std::string &Queue::dequeue()
{
    if (inbox.isEmpty(inbox))
    {
        std::cout << "The queue is empty!";
        return inbox.pop(inbox);
    }
    else
        return inbox.pop(inbox);
}
在stack.cpp中

bool stack::isEmpty(stack& stack1)
{
    if (stack1.value =="")
        return true;
    else
        return false;
}


std::string stack::pop(stack &stack1)
{
    if (isEmpty(stack1))
    {
        std::cout << "The stack is empty ";
        return stack1.value;
    }
    else
    {
        if(stack1.next != NULL)
        {
            std::string val1 = stack1.value;
            stack1 = *stack1.next;
            return val1;
        }
        else
        {
            std::string val2 = stack1.value;
            stack1.value="";
            stack1.next = NULL;
            return val2;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

return inbox.pop(inbox);无法编译。 inbox.pop(inbox)是一个右值,因此无法绑定到非const引用。

可能你已经启用了编译器扩展以允许这种绑定(我认为MSVC默认执行此操作),但是你仍然返回对不再存在的对象的引用,导致未定义 行为。 (pop()返回的临时字符串仅存活到下一个;,然后被破坏。

要解决此问题,请更改

std::string &Queue::dequeue()

std::string Queue::dequeue()

(显然,也改变了函数声明)。

您还没有提供足够的代码来确定stack::pop是否有任何错误(尽管看起来确实有点奇怪)。至少显示stack及其构造函数的类定义。