微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++:使用向量和迭代器时得到错误:std::bad_alloc

如何解决C++:使用向量和迭代器时得到错误:std::bad_alloc

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

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 );
}

也许我试图无意识地修改这些 const 值中的一个或一些。但我不是。

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。