我在C ++中是一个相当新的人,但是我在编码中并没有真正看到这个问题(我想你永远都不会这样做)。 我将尽我所能,尽量不要让您充满大量的代码,因此您不会关注无关紧要的内容,但是如果您需要更多内容,请告诉我。 很抱歉,如果大多数变量都是葡萄牙语。
在这个文件中,player.cpp我有这个:
conda update numpy
这是导致程序崩溃的最后一行 setCor函数位于navio.cpp及其相应的头文件中:
for(i=0;i<na.size();i++){ //this cycle allows me to find the object I want in a vector...
if(na[i]->getID()==n){ //...of class objects
l=na[i]->getX();
c=na[i]->getY();
flag1=1;
}
}
na[i]->setCor(l-1,c-1); //when I try to alter this values I call a function of another file
我必须这样做,因为xcor和ycor都是私有变量。 在此之前,此功能已成功使用,当我第二次尝试使用她时,它使我的程序崩溃了。
为了帮助您了解一些上下文,以下是我的代码这一部分所涉及的类:
void navio::setCor(int x, int y){
xcor=x;
ycor=y;
}
答案 0 :(得分:3)
问题似乎在于您正在访问数组的末尾。
for(i=0;i<na.size();i++){
...
}
na[i]->setCor(l-1,c-1);
退出循环时,i
将为na.size()
,因此访问na[i]
就是访问数组末尾的内容(有效元素是从0
到{{ 1}})。
答案 1 :(得分:0)
您的代码中有一些不清楚的地方。 首先,您正在使用
na[i]->setCor(l-1,c-1);
该指令不在for循环中,而索引i在循环之外的其他地方声明。当程序退出 for循环时,索引i 的值超出了 na 的大小。
检查一下。
答案 2 :(得分:0)
在找到ID为n的对象之后,您忘记了中断循环,因此在for循环之后,我将始终是na.size(),它超出了数组的末尾。您需要添加中断符号并添加一些代码来处理找不到对象的情况。