c++;在头文件中声明向量 在C++中,我在类的头文件中声明了一个向量。在cpp文件中,当我尝试访问向量或将新元素推送到向量时,会导致程序终止。如何解决这个问题
MyClass.hc++;在头文件中声明向量 在C++中,我在类的头文件中声明了一个向量。在cpp文件中,当我尝试访问向量或将新元素推送到向量时,会导致程序终止。如何解决这个问题,c++,vector,C++,Vector,MyClass.h MyClass{ private: vector<Group*> myVector; public: MyClass(); void someMethod(string group_name); }; 不,这个代码很好。这里有其他原因导致错误 Group g(group_name); myVector.push_back(&g); // also cause error 然而,这段代码是一场即
MyClass{
private:
vector<Group*> myVector;
public:
MyClass();
void someMethod(string group_name);
};
不,这个代码很好。这里有其他原因导致错误
Group g(group_name);
myVector.push_back(&g); // also cause error
然而,这段代码是一场即将发生的灾难。当
g
超出范围时,它将被销毁,存储在myVector
中的指针指向随机内容。以后使用该指针可能会产生奇怪的效果,包括看起来工作正常。您没有创建MyClass的实例:MyClass*MyClass=new MyClass()代码>,所以myClass只包含一些垃圾
MyClass *myclass;
myclass->someMethod("aaa");
您试图取消引用包含垃圾值的指针,代码应如下所示:
MyClass *myclass;
//初始化myclass实例
Myclass cMyclass
//将其分配给指向myClass的指针:
myclass = &cMyclass
//然后可以取消对其的引用:
myclass->someMethod("aaa");
你介意发帖吗?我觉得那些抛出错误的行很好。然而,将对局部变量的引用推到向量上是一个坏主意(参见Pete的答案),但要得到真正的答案,您至少应该发布抛出的异常和重现问题所需的完整(但最小!)代码(即someMethod是如何调用的?)我的问题是最小的、完整的和可验证的。问题是什么?问题是这段代码中没有任何东西会直接导致分段错误。是的,将指针推到即将被销毁的变量是一个非常糟糕的主意,但在调用empty或push_back时,不应该因此而出现seg错误。根据您给我们的信息,我们现在只能推测。@NoName不,您的问题是无法验证的,因为至少在MyClass
中没有调用函数的main()
函数。即使使用vector并添加带有push\u back的元素也不起作用
Myclass cMyclass
myclass = &cMyclass
myclass->someMethod("aaa");