C++ 向量在尝试添加字符串时崩溃
我正在尝试向vector添加字符串,但添加字符串时程序崩溃。vector在名为customer.hpp的单独头文件中声明,实现在customer.cpp中。在该文件中,我面临addProductTocart函数的问题。提前谢谢 Customer.hppC++ 向量在尝试添加字符串时崩溃,c++,vector,C++,Vector,我正在尝试向vector添加字符串,但添加字符串时程序崩溃。vector在名为customer.hpp的单独头文件中声明,实现在customer.cpp中。在该文件中,我面临addProductTocart函数的问题。提前谢谢 Customer.hpp #ifndef CUSTOMER_HPP #define CUSTOMER_HPP #include "Product.hpp" class Customer { private: std::vector<std::strin
#ifndef CUSTOMER_HPP
#define CUSTOMER_HPP
#include "Product.hpp"
class Customer
{
private:
std::vector<std::string> carts;
std::string name;
std::string accountID;
bool premiumMember;
public:
Customer(std::string n, std::string a, bool pm);
std::string getAccountID();
std::string cusname();
//std::vector<std::string> getCart();
void addProductToCart(std::string);
bool isPremiumMember();
void emptyCart();
};
#endif
编辑:
Customer* Store:: getMemberFromID(std::string id) {
for(int i = 0; i < members.size(); i++) {
Customer c = members.at(i);
if(c.getAccountID() == id) { return &c; }
}
return NULL;
}
Customer*Store::getMemberFromID(std::string id){
对于(inti=0;i
似乎客户*c=Store::getMemberFromID(mID)代码>返回无效指针(例如nullptr)。使用调试器检查它
由于您没有提供Store::getMemberFromID(mID)
的实现,我们无法提供更多帮助
编辑:
Customer* Store:: getMemberFromID(std::string id) {
for(int i = 0; i < members.size(); i++) {
Customer c = members.at(i);
if(c.getAccountID() == id) { return &c; }
}
return NULL;
}
在提供了getMemberFromID
的实现之后,很明显,您将返回一个指向堆栈分配对象的指针,该对象在超出范围时将被释放。您的代码中只有未定义的行为
如何解决此问题?您可以将实现更改为以下内容:
Customer* Store:: getMemberFromID(std::string id) {
for(int i = 0; i < members.size(); i++) {
Customer& c = members.at(i);
//______^_______
if(c.getAccountID() == id) { return &c; }
}
return NULL;
}
Customer*Store::getMemberFromID(std::string id){
对于(inti=0;i
无论如何,这不是一个好的解决方案。请考虑以更好的方式重新设计您的问题。客户*存储::GETMeNoFrOMID(STD:String ID){for(int i=0;i成员.siz());客户C=成员。AT(i);如果(C.GeCuto()= ID){Real&C;}}返回NULL;}这就是执行that@user1210000最好在问题中添加一个编辑。正如你可能在评论中看到的那样,这几乎是不可读的。胡曼已经抓住了它。函数返回向量中值的临时副本。副本超出范围,并在调用方可以使用它之前在函数结束时销毁。格兰芬多得10分。我认为情况并非如此,因为我试图在退出函数之前在购物车内打印值,但它甚至没有达到代码的那部分。因此,该程序在添加到VectorHankYou@HumamHelfawi时崩溃,因为它起作用了。我按照你的建议修改了代码,效果很好,谢谢
Customer* Store:: getMemberFromID(std::string id) {
for(int i = 0; i < members.size(); i++) {
Customer& c = members.at(i);
//______^_______
if(c.getAccountID() == id) { return &c; }
}
return NULL;
}