C++:在使用向量和迭代器时获取错误:std::bad_alloc



我正在使用mailio库,当我想获取向量中的所有元素时,我遇到了麻烦。

string msg = "Subject: " + mail -> subject() + "nFrom: ";
for(auto address = ( mail -> from() ).addresses.begin(); address != ( mail -> from() ).addresses.end(); ++address ){ //address is not empty
msg.append( address -> name );//     <----here
}

以下是类别message:的简要定义

class MAILIO_EXPORT message : public mime
{
...
public:
mailboxes from() const;
...
}
struct MAILIO_EXPORT mailboxes
{
...
std::vector<mail_address> addresses;
...
}
struct MAILIO_EXPORT mail_address
{
...
std::string name;
...
}

程序终止并返回get error: std::bad_alloc。我不知道出了什么问题,尽管我仍然设法用以下代码解决了它:

string msg = "Subject: " + mail -> subject() + "nFrom: ";
auto add = ( mail -> from() ).addresses; 
for(auto address = add.begin(); address != add.end(); ++address ){
msg.append( address -> name );
}

也许我试图无意识地修改其中一个或一些常量值。但我不是。

如果from()没有返回引用,那么它会复制结构,包括复制std::vector。这意味着在循环中,您得到两个不同的向量,分别取其begin()end()。不允许在它们之间循环,因为begin迭代器很可能永远不会匹配end,尤其是在越界之前。

在第二段代码中,有一个副本,您可以使用其中的迭代器,这样它们就可以工作了。

最新更新