簡體   English   中英

C++:使用向量和迭代器時出現錯誤:std::bad_alloc

[英]C++: get error: std::bad_alloc when using vector and iterator

我正在使用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
}

以下是 class 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() 不允許在這些之間循環,因為開始迭代器很可能永遠不會匹配結束,尤其是在超出范圍之前。

在第二個代碼中有一個副本,您可以從中使用迭代器,以便它們可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM