我在這個代碼內存損壞:內存與腐敗的std :: 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詳細:: initializer_lists'有他們的名字是有原因的。它們應該只用於*初始化*,而不是長期存儲。這就是爲什麼他們有引用語義。你所有的'std :: initializer_list'實際上只有在'lists'初始化結束之前才存在。 – Xeo
'^^'該評論已被系統正式接受爲您的問題的正確答案。感謝您使用我們的服務! –