分割错误:使用向量时为 11 c++



我正在尝试为我的大学项目编写一个程序,该程序应该先到先得调度 我对这个函数想了很多,但我不知道如何让它工作,我总是得到分段错误: 11,我也尝试使用temp.at(j(,但它给了我分割错误: 6,我试图最小化向量,以便通过在函数外部声明向量来绑定,然后使用temp.size((而不是进程,但它也不起作用。

void FCFS(Process ProcessDetails[], int Processes)
{
vector<int> temp;
vector<int> temp1;
int first = 0; //first value to compare with.
for(int j = 0; j < Processes; j++){ // to make sure that it passes through all elements.
for(int i = 0; i < Processes; i++){ // pass each PID and Burst time to vector temp and temp1.
if(ProcessDetails[i].ArrivalTime == first){
temp.operator[](j) = ProcessDetails[i].PID;
temp1.operator[](j) = ProcessDetails[i].BurstTime;
}
}
first++;// increase first value to declare the round is finished and start a new one.
}
for(int i = 0; i < Processes; i++){ // pass the sorted vector values back to the arrays.
ProcessDetails[i].PID = temp.operator[](i);
ProcessDetails[i].BurstTime = temp1.operator[](i);
}
}

该程序在达到此功能之前运行良好,请帮助。

如果向量用于访问不存在的元素,则向量operator[]()的行为是未定义的。

由于您使用了默认构造的向量,因此它们的大小为零 - 因此它们没有要访问的元素。

如果使用.at()成员函数,它将检查索引并在索引无效时抛出异常(类型std::out_of_range,在标准标头<stdexcept>中声明(。 您可以通过将代码包装在适当的try/catch块中来确认这一点。

为了消除这个问题,你需要在使用operator[]()之前重新调整向量(例如,使用push_back()向其添加元素,使用resize()调整其大小等(。 并确保索引有效,因为operator[]()不会调整std::vector的大小。

此外,temp[j]等同于temp.operator[](j)。 对于提供operator[]()函数的类型,编译器处理将表达式(如temp[j](转换为temp.operator[](j)调用。

向量没有元素。

因此,使用 vector 运算符 [] 将失败。

使用push_back、置换、调整大小或其他一些函数将元素添加到矢量中。

您必须将向量赋值更改为

if(ProcessDetails[i].ArrivalTime == first){
temp.push_back(ProcessDetails[i].PID);
temp1.push_back(ProcessDetails[i].BurstTime);
}

相关内容

  • 没有找到相关文章

最新更新