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());
}
}
// [...]
}