C++ Bubblesort提供访问冲突

C++ Bubblesort提供访问冲突,c++,arrays,file,sorting,bubble-sort,C++,Arrays,File,Sorting,Bubble Sort,大家好,我正在完成一项作业,我需要根据员工的ID号对一个文件进行排序。文件中有10行,每行都有员工信息。顺序是ID LASTNAME FIRSTNAME 在我编写sort函数并将所有数据正确复制到数组之前,该程序运行良好,但现在在添加sort函数之后,我不断收到访问冲突,没有提示是什么导致了它 我将感谢任何帮助 #include <iostream> #include <string> #include <fstream> using namespace st

大家好,我正在完成一项作业,我需要根据员工的ID号对一个文件进行排序。文件中有10行,每行都有员工信息。顺序是ID LASTNAME FIRSTNAME

在我编写sort函数并将所有数据正确复制到数组之前,该程序运行良好,但现在在添加sort函数之后,我不断收到访问冲突,没有提示是什么导致了它

我将感谢任何帮助

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class Employee
{
public:
    int _id;
    string _lastName;
    string _firstName;

    Employee()
    {
        _id = 0;
        _lastName = "n/a";
        _firstName = "n/a";
    }
};

void copyFile10(Employee [], int);
void sortFile10(Employee [], int);
int main()
{
    const int size10 = 10;
    Employee employees10[size10];

    copyFile10(employees10, size10); //1.fill array/copy file
    sortFile10(employees10, size10); //2. sort

    system("pause");
    return 0;
}

void copyFile10(Employee employees10[], const int size)
{
    ifstream data10("data_10.dat");
    for(int count = 0; count < 10; count++) //1.fill array/copy file
    {
        data10 >> employees10[count]._id;
        data10 >> employees10[count]._lastName;
        data10 >> employees10[count]._firstName;
    }
    data10.close();
}

void sortFile10(Employee employees10[], const int size)
{
    Employee buff1;
    Employee buff2;
    int counter = 0;
    bool ordered = false;

    while (ordered == false)
    {
        for(int count = 0; count < size-1; count++)
        {
            if(employees10[count]._id > employees10[count+1]._id)
            {
                buff1._id = employees10[count+1]._id;
                buff1._lastName = employees10[count+1]._lastName;
                buff1._firstName = employees10[count+1]._firstName;

                buff2._id = employees10[count]._id;
                buff2._lastName = employees10[count]._lastName;
                buff2._firstName = employees10[count]._firstName;

                employees10[count]._id = buff1._id;
                employees10[count]._lastName = buff1._lastName;
                employees10[count]._firstName = buff1._firstName;

                employees10[count+1]._id = buff2._id;
                employees10[count+1]._lastName = buff2._lastName;
                employees10[count+1]._lastName = buff2._lastName;

                counter++;
            }
            if(counter == 0)
            ordered = true;
            else
                counter = 0;
        }
    }
}
#包括
#包括
#包括
使用名称空间std;
班级员工
{
公众:
内部id;
字符串_lastName;
字符串_firstName;
雇员()
{
_id=0;
_lastName=“不适用”;
_firstName=“不适用”;
}
};
作废副本文件10(员工[],内部);
作废sortFile10(员工[],内部);
int main()
{
常数int size10=10;
雇员10[规模10];
copyFile10(雇员10,大小10);//1.fill数组/复制文件
sortFile10(employees10,大小10);//2.排序
系统(“暂停”);
返回0;
}
无效副本文件10(员工员工10[],常量整数大小)
{
ifstream data10(“data_10.dat”);
for(int count=0;count<10;count++)//1.fill数组/复制文件
{
数据10>>雇员10[计数]。\u id;
数据10>>员工10[计数]。\u lastName;
数据10>>雇员10[计数]。_firstName;
}
data10.close();
}
无效排序文件10(员工员工10[],常量整数大小)
{
员工福利1;
雇员2名;
int计数器=0;
bool=false;
while(ordered==false)
{
对于(int count=0;count员工10[计数+1]。\u id)
{
buff1.\u id=员工10[计数+1]。\u id;
buff1.\u lastName=员工10[计数+1]。\u lastName;
buff1._firstName=员工10[计数+1]。_firstName;
buff2.\u id=员工10[计数]。\u id;
buff2._lastName=员工10[计数]。_lastName;
buff2._firstName=员工10[计数]。_firstName;
雇员10[计数]。\u id=buff1.\u id;
员工10[计数]。\u lastName=buff1.\u lastName;
雇员10[计数]。_firstName=buff1._firstName;
雇员10[计数+1]。\u id=buff2.\u id;
员工10[计数+1]。\u lastName=buff2.\u lastName;
员工10[计数+1]。\u lastName=buff2.\u lastName;
计数器++;
}
如果(计数器==0)
有序=真;
其他的
计数器=0;
}
}
}
for(int count=0;count员工10[计数+1]。\u id)

在循环的最后一次迭代中(即
count
为9)这里发生了什么?

当您的程序在调试器下崩溃时,您肯定有可用的调用堆栈吗?它在这一行崩溃了吗?如果(employees10[count]。\u id>employees10[count+1]。\u id);“count+1”是10,但最大数组索引是9。这可能是Mark Stevens,但它没有显示它是哪一行。我将尝试找到一个解决方案,看看是否能解决它。@sircrisp这是气泡排序和编程101的一个常见错误。您可以将“this”项与“next”项进行比较输入,但让循环一直运行到结束,此时它应该是end-1。是的,调试器应该在这一行上给您正确的提示。关于样式的一些建议。首先,编译器为
Employee
,生成了一个赋值运算符,因此交换代码中的详细赋值可以替换为更简单的赋值,例如
buff1=employees10[count+1];
。第二,你可以用一个临时值交换两个值。第三,你可以用
std::swap
交换两个值。我已经解决了这个问题,但我仍然可以访问violation@sircrisp-原来的代码不是现在有问题的代码。显示修复的代码!
for(int count = 0; count < size; count++)
        {
            if(employees10[count]._id > employees10[count+1]._id)