我在SessionMenu.h中定义了一个SessionMenu指针的静态向量,如下所示:
static vector<SessionMenu *> sessionMenus;
我在SessionMenu类中定义了一个accountType枚举,并在SessionMenu类的构造函数中初始化了该变量。
在我的应用程序的入口点,我向这个向量添加了三个对象,如下所示:
SessionMenu::sessionMenus.push_back(&StudentSessionMenu());
SessionMenu::sessionMenus.push_back(&TutorSessionMenu());
SessionMenu::sessionMenus.push_back(&AdministratorSessionMenu());
此时,当我在此时调试SessionMenu :: sessionMenus时,指针是有效的,而accountType变量的值是预期的。
然而,稍后在我的应用程序中,当我迭代向量时,我的指针如此:
for (vector<SessionMenu *>::iterator menuIterator = sessionMenus.begin();
menuIterator != sessionMenus.end(); ++menuIterator) {
SessionMenu *currentMenu = *menuIterator;
if(currentMenu->getAccountType() == accountType)
return currentMenu;
}
return NULL;
指针似乎指向不同的地方。
任何可能导致此问题的想法?
干杯。
答案 0 :(得分:0)
StudentSessionMenu()
是暂时的。指针似乎只是有效,但它们不是。当你检查它们时,记忆已经消失了。你不再拥有它。
奇怪的是,在尝试获取变量的地址时,您至少没有得到警告。 您的警告是否已打开?你是在忽视它们吗?
动态分配对象(SessionMenu::sessionMenus.push_back(new StudentSessionMenu());
)或使用智能指针向量。