F流I/O/触发断点的动态分配数组
FStream I/O / Dynamically allocated arrays triggering breakpoint
基本上,这个函数的目的是获取一组学生数据,根据学生的ID号进行排序,并将其打印到一个新文件中。断点似乎发生在写入输出文件的循环中,但我不确定,因为之后我所做的所有cout语句似乎仍然被读取到控制台。
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;
}
这些语句是错误的:
int *student_id = new int(size);
char *grade = new char(size);
double *gpa = new double(size);
您没有分配3个数组,实际上是分配3个单个值。因此,当循环之后试图访问数组元素时,它们访问内存的方式不正确,导致未定义的行为,这可能会损坏内存。
将这些语句改为:
int *student_id = new int[size];
char *grade = new char[size];
double *gpa = new double[size];
一个更好的解决方案是直接使用std::vector
而不是new[]
,不过:
std::vector<int> student_id(size);
std::vector<char> grade(size);
std:vector<double> gpa(size);
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 动态分配Q_Property变量
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用动态分配将 char* 复制到另一个字符**
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 二维阵列的动态分配
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 在运行时为动态分配的内存输入值
- 释放动态分配的内存时是否需要执行此额外步骤
- 动态分配的 int 数组的共享指针触发了断点