需要使用指针返回对象实例的建议 - bad_alloc 在内存位置?

问题描述 投票:0回答:1

我在尝试从函数的实例列表中返回实例时遇到一些麻烦。

我有一个集合,用于存储 Student 类的实例。我试图从“查找”函数返回一个实例,以便能够根据学生姓名找到该实例,我在另一个类/文件中调用该函数。我希望能够在另一个文件中获取此对象实例,编辑某些属性并在该实例列表中更新它。

我在Student.cpp中的查找功能:

static set<Student, StudentCmp> studentInstances;

Student* Student::find(int studentId) {
    Student *foundStudent = new Student();
    for (Student s: studentInstances) {
        if(s.getStudentID() == studentId) {
            foundStudent = &s;
        }
    }
    
    return foundStudent;
}

另一堂课:

*Student::find(1).setStudentName("John");

是的,该学生 ID 确实存在于列表中,并且在查找功能内一切正常。它找到 ID 和相关地址,但是当我尝试使用查找函数给我的地址指向该变量时,出现此错误:

Unhandled exception at 0x7622DFD8 in Driver.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x006EF044

我假设该地址超出范围?我不知道为什么,但看起来地址在退出函数时不再指向我的对象,我查找了这个以找到答案,人们说使用“new”关键字将对象保留在堆上但这似乎对我不起作用。

有什么建议可以实现我想做的事吗?

c++ object pointers memory instance
1个回答
0
投票

这里的问题是,您返回的指针不是指向集合中的对象或您分配的指针,而是返回指向函数本地对象的指针,该对象在退出函数时被销毁。

for (Student s: studentInstances) 

复制

Student
中的每个
studentInstances
。 您需要的是类似的参考

for (Student& s: studentInstances) 

这样,当您返回一个指针时,您将返回一个指向位于

studentInstances

中的对象的指针
© www.soinside.com 2019 - 2024. All rights reserved.