C++ FStream I/O/动态分配的数组触发断点
基本上,此函数的作用是获取一组学生数据,并根据学生ID号对其进行排序,然后将其打印到新文件中。断点似乎出现在写入输出文件的循环中,但我不确定,因为似乎我在写入输出文件后所做的所有cout语句都被读取到控制台C++ FStream I/O/动态分配的数组触发断点,c++,fstream,C++,Fstream,基本上,此函数的作用是获取一组学生数据,并根据学生ID号对其进行排序,然后将其打印到新文件中。断点似乎出现在写入输出文件的循环中,但我不确定,因为似乎我在写入输出文件后所做的所有cout语句都被读取到控制台 void file_score(char* infile, char* outfile) { int size; ifstream fin(infile); fin >> size; int *student_id = new int
void file_score(char* infile, char* outfile)
{
int size;
ifstream fin(infile);
fin >> size;
int *student_id = new int(size);
char *grade = new char(size);
double *gpa = new double(size);
//Creates new arrays of size that is read from file.
for (int i = 0; i < size; i++)
{
fin >> student_id[i] >> grade[i] >> gpa[i];
int temp_id = student_id[i];
char temp_grade = grade[i];
double temp_gpa = gpa[i];
int j;
for (j = (i - 1); j >= 0; j--)
{
if (student_id[j] < temp_id) {
break;
}
student_id[j + 1] = student_id[j];
grade[j + 1] = grade[j];
gpa[j + 1] = gpa[j];
}
student_id[j + 1] = temp_id;
grade[j + 1] = temp_grade;
gpa[j + 1] = temp_gpa;
//Using insertion sort to sort data as its being scanned in.
}
fin.close();
ofstream fout(outfile);
for (int k = 0; k < size; k++)
{
fout << student_id[k] << " " << grade[k] << " " << gpa[k] << "\n";
}
//Print to file
fout.close();
delete []student_id;
delete []grade;
delete []gpa;
}
void file_分数(char*infile,char*outfile)
{
整数大小;
ifstream-fin(infle);
鳍>>大小;
int*student_id=新int(大小);
字符*等级=新字符(大小);
双精度*gpa=新双精度(尺寸);
//创建从文件读取的大小为的新数组。
对于(int i=0;i>学生id[i]>>成绩[i]>>平均成绩[i];
int temp_id=学生id[i];
字符温度等级=等级[i];
双温gpa=gpa[i];
int j;
对于(j=(i-1);j>=0;j--)
{
如果(学生id[j]<临时id){
打破
}
学生id[j+1]=学生id[j];
等级[j+1]=等级[j];
平均绩点[j+1]=平均绩点[j];
}
学生id[j+1]=临时id;
等级[j+1]=温度等级;
平均绩点[j+1]=临时平均绩点;
//使用插入排序在扫描数据时对其进行排序。
}
fin.close();
流孔(外流孔);
对于(int k=0;k 因为这些说法是错误的:
int*student\u id=新int(大小);
字符*等级=新字符(大小);
双精度*gpa=新双精度(尺寸);
您没有分配3个数组,实际上是分配了3个单个值。因此,当您的循环尝试在以后访问数组元素时,它们错误地访问了内存,导致未定义的行为可能会损坏内存
将这些语句改为:
int*student_id=newint[size];
字符*等级=新字符[大小];
double*gpa=新的double[尺寸];
更好的解决方案是直接使用std::vector
而不是new[]
,不过:
std::vector学生id(大小);
标准:病媒等级(大小);
标准:向量gpa(大小);