는이 코드에서 메모리 손상이 있습니다메모리 손상 :: 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
으로 발생합니까? 때문에 표준 : : 문자열 개체의
'표준에서 더 자세히 : 이유가 자신의 이름이 initializer_lists'을 찾을 수 있습니다. 장기 저장이 아닌 초기화 *에만 사용해야합니다. 그것이 참조 의미론을 갖는 이유입니다. 모든'std :: initializer_list'는 실제로'lists'의 초기화가 끝날 때까지만 유효합니다. – Xeo
'^^'이 의견은 귀하의 질문에 대한 정답으로 공식적으로 받아 들여졌습니다. 우리의 서비스를 이용해 주셔서 감사합니다! –