Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 1[main]972异常::句柄:异常:状态\访问\违规说明及修复方法_C++_Function_Object_Pointers - Fatal编程技术网

C++ 1[main]972异常::句柄:异常:状态\访问\违规说明及修复方法

C++ 1[main]972异常::句柄:异常:状态\访问\违规说明及修复方法,c++,function,object,pointers,C++,Function,Object,Pointers,要尽可能简单地询问,任何人都可以解释此代码的原因: 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 <= myNod

要尽可能简单地询问,任何人都可以解释此代码的原因:

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;
    }
以及如何修复它的想法

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

此外,这是影响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);
矢量学生;
节点1(“Bobby”,“Zillch”,28,55);
节点2(“邪恶”,“牙医”,308,55);
节点3(“Raz”,“Buton”,10,55);
学生们。推回(node1);
学生们。推回(node2);
学生们,向后推(node3);

cout我不能肯定这一点,但您正在访问未分配给您的内存,因此很可能您正在运行
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());
        }
    }

    // [...]
}
LinkedListByGrade::LinkedListByGrade(向量常量和myNodes){
//通过常量引用------------------^
//将此设置为高。不要访问向量,以防没有
//其中的要素:
int lowestGradeFound=std::numeric_limits::max();
//这是在哪里删除的?
Node*pFirstNode=新节点();
//使用迭代器,而不是索引在容器上循环。。。
对于(向量::迭代器i=myNodes.begin(),end=myNodes.end();!=end;++i)
{
//通过`i->`
如果(i->getGrade()getGrade();
pFirstNode->重新分配节点(
i->getFirstName(),
i->getLastName(),
i->getId(),
i->getGrade());
}
}
// [...]
}

但是你真的,真的需要学习使用你的调试器

int lowestGradeFound=myNodes[0].getGrade()时,为
myNodes.size()==0
是否被调用?你必须在调试器中运行这个。StackOverflow不能为你这么做!您需要学习使用调试器。当代码执行时,我们不知道
myNodes
包含什么;你是唯一一个可以确定这一点并逐步通过代码来解决问题的人。好吧,但根据你所说的,这应该与向量关闭有关?我们说我们不能告诉你-你是唯一可以告诉你的人。使用调试器。在
循环的
开始处设置一个断点,运行代码,并逐步找出导致访问冲突的原因。我们不能为你这样做。(这是我们对调试器的第三次引用。您得到需要使用调试器的提示了吗?@Nood-您在这里遇到了一个问题
(size_t i=0;i我没有使用调试器的原因是它给了我一个错误。我对它做了很多研究,但我需要在调试器之外的地方处理我的代码。如果你有答案,这里是错误的
在“/usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/iostream”中找不到源文件找到文件或编辑源查找路径以包含其位置。
调试此函数不需要“iostream”!
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());
        }
    }

    // [...]
}