我的程序的一些背景:它使用链表创建优先级队列。每次用户输入优先级(使用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];
当我注释掉这一行时,程序没有给我错误。我无法弄清楚为什么我会收到此错误。
答案 0 :(得分:0)
您可能正在访问queuef
数组的范围之外。如果它是参数声明中声明的25个元素,则第一次通过i
循环,您将写入queuef[25]
,这将超过数组的末尾,从而导致未定义的行为和崩溃。