0

できるだけ簡単に質問するために、誰もがこのコードの理由を説明できますか?

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);
4

1 に答える 1

1

確かに言えませんが、割り当てられていないメモリにアクセスしているため、の境界を越えて実行している可能性がありますmyNodesこれは、デバッガーを使用して判別できます

私が確かに言えることは、関数の最初の行で次のように呼び出すことです。

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

にアイテムがない場合myNodes、これによりアクセス違反が発生するはずです。

そして、あなたはにアクセスしているので、あなたは確かmyNodesにあなたのループの終わりを走っています。formyNodes[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());
        }
    }

    // [...]
}

しかし、あなたは本当に、本当にデバッガの使い方を学ぶ必要があります!

于 2013-02-23T03:06:16.130 に答える