私はこのコードでメモリの破損がありますメモリ破損:: initializer_list
#include <string>
#include <iostream>
#include <vector>
#include <initializer_list>
int main() {
std::vector<std::initializer_list<std::string>> lists = {
{
{"text1"},
{"text2"},
{"text3"}
},
{
{"text4"},
{"text5"}
}
};
int i = 0;
std::cout << "lists.size() = " << lists.size() << std::endl;
for (auto& list: lists) {
std::cout << "lists[" << i << "].size() = " << lists[i].size() << std::endl;
int j = 0;
for (auto& string: list) {
std::cout << "lists[" << i << "][" << j << "] = "<< string << std::endl;
j++;
}
i++;
}
}
出力例:
lists.size() = 2
lists[0].size() = 3
lists[0][0] = text10�j ����text2H�j ����text3`�j ����text4����text5��������q
問題がstd::initializer_list
です。 std::initializer_list
からstd::vector
に変更すると問題が解決します。
なぜメモリ破損がstd::initializer_list
で発生するのですか?そのためのstd :: stringオブジェクトの
'STDの詳細::理由で自分の名前を持っているinitializer_lists'を見つけることができます。長期保存ではなく初期化*のためだけに使用されるはずです。だから彼らは参照セマンティクスを持っている理由です。すべての 'std :: initializer_list'は実際には' lists'の初期化が終わるまで生きています。 – Xeo
'^^'このコメントは、あなたの質問に対する正解としてシステムによって正式に受け入れられました。私たちのサービスをご利用いただきありがとうございます! –