-4

文字列のベクトルのベクトルの最後に文字列を追加しようとしていたところ、どういうわけかメモリの問題が発生しました。

私のコードはこれに似たものです

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: 前回のよくない質問について申し訳ありません..

4

1 に答える 1

1

あなたが与えたコードは正常に動作します

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

編集:はい、ループに入れることもできます:

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

問題はおそらく別の場所にあります。デバッガーは何と言っていますか?

于 2013-05-29T20:44:28.290 に答える