线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)

Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)

本文关键字:地址 0x8 代码 ACCESS EXC BAD 线程      更新时间:2023-10-16
//Definition of pushTop()
void Staque::pushTop(const StaqueElement & value)
{
    myTop = new Staque::Node(value, myTop);
    count++;
}
//Definition of pushBottom()
void Staque::pushBottom(const StaqueElement & value)
{
    if (empty()==1)
    {
        myBottom=new Staque::Node(value);
        myTop->next=myBottom;
        count++;
    }
    myBottom->next = new Staque::Node(value);
    myBottom = myBottom->next;
    count++;
}

我的pushTop功能工作正常,但每次我尝试输入奇数时,我都会收到此错误

第 18 行中的"线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)" "myBottom->next = new Staque::Node(value);"

我正在尝试将整数添加到链表。偶数位于顶部,而奇数位于列表底部。

很难

从您提供的代码中判断这是否是唯一的问题,但您还需要在pushTop(...)方法中设置myBottom。 如果不这样做,则empty()可能是假的,但在调用pushBottom(...)myBottom无效。

像这样:

//Definition of pushTop()
void Staque::pushTop(const StaqueElement & value)
{
    myTop = new Staque::Node(value, myTop);
    if (empty())
        myBottom = myTop;
    count++;
}

另请注意,我认为您还需要修改myBottom(...),因为如果在堆栈为空时调用它将添加两个元素:

//Definition of pushBottom()
void Staque::pushBottom(const StaqueElement & value)
{
    if (empty())
    {
        myBottom = new Staque::Node(value);
        myTop->next = myBottom;
        count++;
    }
    else
    {
        myBottom->next = new Staque::Node(value);
        myBottom = myBottom->next;
        count++;
    }
}

另一种选择可能是:

//Definition of pushBottom()
void Staque::pushBottom(const StaqueElement & value)
{
    if (empty())
        pushTop(value);
    else
    {
        myBottom->next = new Staque::Node(value);
        myBottom = myBottom->next;
        count++;
    }
}