当我尝试从对象更改私有值时,程序崩溃

时间:2018-12-13 16:01:53

标签: c++

我在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;
}

3 个答案:

答案 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(),它超出了数组的末尾。您需要添加中断符号并添加一些代码来处理找不到对象的情况。