函数返回的分段错误C++
问题描述:
我正在创建一个cpu调度程序,一旦readInput函数返回,我将收到分段错误。从我读过的东西中,堆栈以某种方式被破坏。函数返回的分段错误C++
我确定了导致它的代码行,但我找不出原因。
下面是过程类的相关部分:
class Process{ //Process class deals with the values of various variables the process will take on over the course of execution on a process
public:
Process(){
pid = startTime = endTime = initPriority = priority = timeSlice = totalCpuBurst = totalCpuTime = totalIoTime = 0;
}
void setPid(int proId){pid = proId;}
void setPriority(int bonus){priority = initPriority + bonus;}
void setProcessStart(int start){startTime = start;}
void setTimeSlice(int t){timeSlice = t;}
void setInitPriority(int nice){
initPriority = (int)(((nice + 20)/39.0)*30 + 0.5) + 105;
}
void setNumCpuBurst(int duration){numCpuBurst.push_back(duration);}
void setNumIoBurst(int duration){numIoBurst.push_back(duration);}
private:
int pid, startTime, endTime, initPriority, priority, timeSlice, totalCpuBurst, totalCpuTime, totalIoTime;
vector<int> numCpuBurst;
vector<int>numIoBurst;
};
这里是readInput功能。运行程序时,Cin来自文件间接寻址。该文件每行包含4个或更多整数,以文件末尾的“***”结尾。目前,只有在我的测试文件3个流程
void readInput(Process process[], int &processCount){ //read the input from the file until "***" is encountered
vector<int> values;
string inLine;
int n;
getline(cin, inLine);
while(inLine.compare("***")){
stringstream stream(inLine);
while(stream >> n){
values.push_back(n);
}
for(int i = 0; i< values.size(); i++){
if(i == 0){ //get nice value, set pid and priority
process[processCount].setPid(processCount);
process[processCount].setInitPriority(values[i]);
process[processCount].setPriority(0);
}
else if(i == 1){ //arrival time
process[processCount].setProcessStart(values[i]);
}
else if(i == 2){ //number of cpu bursts
process[processCount].setTotalCpuBurst(values[i]);
}
else if(i >= 3){
if(i % 2 == 1){ //CPU burst
process[processCount].setNumCpuBurst(values[i]);
}
else{ //IO burst
process[processCount].setNumIoBurst(values[i]);
}
}
}
values.clear();
getline(cin, inLine);
processCount++;
}
cout << "break on return";
return;
}
“上回破”的印刷,然后我收到分段错误
这是导致分割故障块
else if(i == 1){ //arrival time
process[processCount].setProcessStart(values[i]);
}
这是迄今为止的主要功能
int main() {
vector<Process> active, expired, io, finished, cpu;
Process startUp[4];
int processCount = 0, runningCount = 0;
readInput(startUp, processCount);
cout << "\nafter read";
return 0;
}
答
您可以有Process
超过4但你只能分配的只有4 Process
小号
阵列这将崩溃的所有值超过4
process[processCount].setProcessStart(values[i]);
尝试改用以下
#define MAX_PROCESS 80
Process startUp[MAX_PROCESS];
MAX_PROCESS
是最大数处理你的文件可以有
根据你以前的答案,它看起来好像4是你的问题,但作为PE r你的提交它不是,所以我建议用backtrace更新这个问题。
此问题已获得两张投票结束,原因是“脱离主题:[请求]推荐或找到书籍,工具,软件库,教程或其他非现场资源。”我很难看到这样的要求。在这里,有一个upvote。 –