1[main]972异常::handle:异常:STATUS_ACCESS_VIOLATION解释和如何修复

1 [main] 972 exception::handle: Exception: STATUS_ACCESS_VIOLATION explanation and how to fix

本文关键字:异常 VIOLATION ACCESS 解释 何修复 handle main STATUS      更新时间:2023-10-16

为了尽可能简单地询问,任何人都可以解释为什么使用此代码:

LinkedListByGrade::LinkedListByGrade(vector<Node> myNodes) {
int lowestGradeFound = myNodes[0].getGrade();
Node *pFristNode = new Node();
cout << "New node created" << endl;
for (size_t i = 0; i <= myNodes.size(); i++) {
    if (myNodes[i].getGrade() < lowestGradeFound) {
        cout << "if triggered" << endl;
        lowestGradeFound = myNodes[i].getGrade();
        pFristNode->reassasignNode(myNodes[i].getFristName(),
                myNodes[i].getLastName(), myNodes[i].getId(),
                myNodes[i].getGrade());
        cout << "int reassassigned" << endl;
    }

给我这个错误:

1 [main] Project 972 exception::handle: Exception: STATUS_ACCESS_VIOLATION 
2130 [main] Project 972 open_stackdumpfile: Dumping stack trace to Project.exe.stackdump

以及如何修复它的想法?

(对不起,我在诊断打印报表中留下了。)

此外,这是唯一影响myNodes:的代码

vector<Node> Students;
Node node1("Bobby", "zilch",28,55);
Node node2("Evil", "Dentist",308,55);
Node node3("Raz", "Buton",10,55);
Students.push_back(node1);
Students.push_back(node2);
Students.push_back(node3);
cout<<"stuff"<<endl;
 LinkedListByGrade myList = LinkedListByGrade(Students);

我不能肯定,但您正在访问未分配给您的内存,所以很可能您正在运行myNodes的边界将能够通过使用调试器来确定此

我可以肯定的是,在函数的第一行中,你可以调用:

int lowestGradeFound = myNodes[0].getGrade();

如果myNodes中没有项目,则这将导致访问冲突。

for-循环中,您肯定已经超过了myNodes的末尾,因为您正在访问myNodes[myNodes.size()]

试试这样的东西:

LinkedListByGrade::LinkedListByGrade(vector<Node> const& myNodes) {
    // Pass by const-reference! ------------------^
    // Set this to something high. Don't access the vector, in case there are no
    // elements therein:
    int lowestGradeFound = std::numeric_limits<int>::max();
    // Where is this deleted?
    Node *pFirstNode = new Node();
    // Use iterators, not indices for looping over a container...
    for (vector<Node>::iterator i = myNodes.begin(), end = myNodes.end(); != end; ++i)
    {
        // Access element by `i->`
        if (i->getGrade() < lowestGradeFound)
        {
            // Now you can assign this safely...
            lowestGradeFound = i->getGrade();
            pFirstNode->reassasignNode(
                i->getFirstName(),
                i->getLastName(),
                i->getId(),
                i->getGrade());
        }
    }
    // [...]
}

但你真的,真的需要学会使用调试器!