Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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++ 离开函数后丢失一些数据_C++ - Fatal编程技术网

C++ 离开函数后丢失一些数据

C++ 离开函数后丢失一些数据,c++,C++,我有一个包含以下向量的类: class MainMenu { private: std::vector <Car> vehicles; std::vector <Instructor> instructors; std::vector <Trainee> trainees; std::vector <Lesson> lessons; public: std::vector<Car>&a

我有一个包含以下向量的类:

class MainMenu {

private:
     std::vector <Car> vehicles;
     std::vector <Instructor> instructors;
     std::vector <Trainee> trainees;
     std::vector <Lesson> lessons;
public:
     std::vector<Car>& getVehicles();
     std::vector<Instructor>& getInstructors();
     std::vector<Trainee>& getTrainees();
     std::vector<Lesson>& getLesson();
}
在代码的某个地方,我执行这样的功能:

Car *car = mainMenu.searchForCarById(idOfVehicle);

Car* MainMenu::searchForCarById(int id) {
     for (Car elem : vehicles) {
         if (elem.getIdInSystem() == id) {
             return &elem;
         }
    }
}
在调试的过程中,我一步一步地执行这个代码,这个简单的函数正确地搜索car,但每当我从函数返回时,每个变量都是字符串不相似的。例如,在
name
变量中,我收到
”。我认为重要的是要提到,只有字符串消失!int保持原样。我做错了什么?

更改这行

for (Car elem : vehicles)

否则,您将保存一个指向超出范围的局部变量的指针,从而针对


elem
车辆中包含的实际对象的副本。然后返回一个指向这个被破坏的本地对象的指针,使其悬空。解决方法是使用
汽车&
代替。

当您在车辆中循环时,以下行:

for (Car elem : vehicles)
制作每个元素的副本并将其存储在elem中

相反,请尝试通过引用获取元素:

for (Car& elem : vehicles)

然后,你可以得到一个指针。但是,一旦修改数组,此指针可能会变为无效。因此它仍然不是最优的。

您返回的是一个局部变量的地址,该地址在使用函数后会被删除。这是未定义的行为。在您的情况下,您应该将您的
elem
作为参考-这将很好地工作,并具有删除不必要副本的附加好处。
searchForCarById()
中还存在“并非所有代码路径都返回值”错误。下次请提供一个适当的.Unrelated,但为什么要有私有类成员,然后提供返回可变引用的公共访问器呢?不妨先公开这些班级成员。
for (Car elem : vehicles)
for (Car elem : vehicles)
for (Car& elem : vehicles)