task2.exe中0x001066F6处的未处理异常:0xC0000005:访问冲突读取位置0x0000000C

时间:2014-05-20 15:43:08

标签: c++ visual-c++ visual-studio-2012

我在下面编写了代码作为学校作业的一部分。它根据学生ID对一组对象指针进行排序,这是一个介于100和999之间的私有int。但由于某种原因,我在VS12中调试时在getId函数上遇到以下错误:

Unhandled exception at 0x001066F6 in task2.exe:
0xC0000005: Access violation reading location 0x0000000C.

这是使用getId的代码:

if (nr_of_students > 1) {
    int pre = nr_of_students - 1;
    int current = nr_of_students;
    Student* temp;
    // This pause will run:
    system("pause");
    while (pre > 0 && students[pre]->getId() > students[current]->getId()) {
        // This pause will NOT run:
        system("pause");
        temp = students[current];
        students[current] = students[pre];
        students[pre] = temp;
        pre--;
        current--;
    }
}

学生班的代码:

class Student : public Person {
private:
    int id;
    /* Other variables */
public:

    /* Constructors and functions */

    int getId() {
        return id;
    }
};

到底是怎么回事?

1 个答案:

答案 0 :(得分:1)

最可能的原因基于提供的信息:

current等于nr_of_students,等于

 while (pre > 0 && students[pre]->getId() > students[current]->getId())

current用作数组索引。由于数组索引从zero开始,如果nr_of_students实际上等于数组中元素数,这将是一个问题。对于前者如果有5个元素,则最大索引可以是4,而不是5。如果您使用5,则内存位置无效,将返回无效Student*,并且使用此无效指针调用getId()将导致访问冲突错误。< / p>