移动数组中的元素SIGABRT错误

时间:2017-03-29 03:28:58

标签: c++ arrays queue

我的程序的一些背景:它使用链表创建优先级队列。每次用户输入优先级(使用cin和while循环)时,数据都会插入到* queue [25]数组中。

我的问题是,在排队所有数据并输入-1退出后,程序打印出数组(正确)然后抛出SIGABRT错误。

问题在于我的排队功能:

void enqueue(Node *queuef[25], int priority, Node *temp)
{
    if (queuef[priority] == NULL) {
        queuef[priority] = temp;
    } else {
        int pos = 25;
        for (int i = 25; i > priority; i--)
        {
            if (queuef[priority+1] == 0)
            {
                queuef[priority+1] = temp;
                break;
            } else {
                queuef[i] = queuef[i-1];
                pos--;
            }
        }
        queuef[pos] = temp;

    }
    cout << queuef;
}

更具体地说,问题出在这一行

queuef[i] = queuef[i-1];

当我注释掉这一行时,程序没有给我错误。我无法弄清楚为什么我会收到此错误。

1 个答案:

答案 0 :(得分:0)

您可能正在访问queuef数组的范围之外。如果它是参数声明中声明的25个元素,则第一次通过i循环,您将写入queuef[25],这将超过数组的末尾,从而导致未定义的行为和崩溃。