将字符串添加到向量的向量[关闭]

Posted

技术标签:

【中文标题】将字符串添加到向量的向量[关闭]【英文标题】:adding strings to a vector of vector [closed] 【发布时间】:2013-05-29 20:36:13 【问题描述】:

我试图在字符串向量的向量末尾添加一个字符串,但不知何故遇到了内存问题。

我的代码与此类似

vector<vector<string>> slist;

....

slist.push_back(vector1);
slist.push_back(vector2);

...

for(int i=0; i<10; i++)
    int length = slist.size()-1;
    slist[length].push_back("String"); // also tried slist.back().push_back("S");

这给了我一个记忆问题

Invalid read of size 8
==2570==    at 0x404D18: std::vector<std::string, std::allocator<std::string>              >::push_back(std::string const&) (stl_vector.h:735)
==2570==    by 0x403956: main (asm.cc:400)
==2570==  Address 0xfffffffffffffff0 is not stack'd, malloc'd or (recently) free'd
==2570==
==2570==
==2570== Process terminating with default action of signal 11 (SIGSEGV)
==2570==  Access not within mapped region at address 0xFFFFFFFFFFFFFFF0
==2570==    at 0x404D18: std::vector<std::string, std::allocator<std::string> >::push_back(std::string const&) (stl_vector.h:735)
==2570==    by 0x403956: main (asm.cc:400)
==2570== 

谁能告诉我为什么?

PS:对于之前问得不好的问题感到抱歉..

【问题讨论】:

slist.back() 更好,但我们需要一个 SSCCE。我不相信你展示了正确的代码。 “内存问题”?什么样的记忆问题?你遇到了什么错误?您向我们展示了我们无法用来重现该问题的代码,并说您收到错误但没有告诉我们它是哪个错误。在这种情况下,我能给出的最具体的答案是“可能有办法让你的代码工作” 【参考方案1】:

你给它的代码works fine:

#include <vector>
#include <string>
#include <iostream>

using namespace std;

void print(vector<vector<string>> s)

    cout << "Lists:" << endl;
    for (const auto& v : s)
    
        cout << "List: ";
        for (const auto& i : v)
        
            cout << i << ", ";
        
        cout << endl;
    
    cout << "Done" << endl;


int main()

    vector<vector<string>> slist;

    slist.push_back(vector<string>());
    slist.push_back(vector<string>());

    print(slist);

    const auto length = slist.size()-1;
    slist[length].push_back("String"); // also tried slist.back().push_back("S");

    print(slist);

编辑:是的,你甚至可以说into a loop:

vector<vector<string>> slist;

print(slist);

for (auto i = 0; i < 7; ++i)

    slist.push_back(vector<string>());
    for (auto j = 0; j < 5; ++j)
    
        slist[i].push_back("String[" + toStr(i) + "][" + toStr(j) + "]"); // also tried slist.back().push_back("S");
    


print(slist);

问题可能出在其他地方。你的调试器说什么?

【讨论】:

嗯……这很奇怪……如果这段代码在for循环中,会不会影响结果? @user1948847,真的,发布sscce。这并不难,而且更有价值。 @user1948847 - 将代码放入循环中可以正常工作:ideone.com/xgO0ty

以上是关于将字符串添加到向量的向量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

首先创建字符串然后通过移动语义将其添加到向量或在向量中创建元素是不是具有内存效率?

如何将字符串添加到 C++ 中无序映射中的字符串向量

如何将字符串的字符推入二维向量[关闭]

如何将字符串数组中的所有项目添加到 Java 中的向量中?

使用 push_back 向向量添加非空字符串,向量内容为空。为啥字符串没有添加到向量中?

将向量的整数内容打印为字符串会导致分段错误 [关闭]