Microsoft Visual Studio Community 2019, V16.5.2를 사용하고 있습니다. 목록 초기화 를 테스트하고 싶습니다
다음 테스트 프로그램을 참조하십시오 :
#include <string>
void foo(std::string str) {}
int main() {
foo( {"str1", "str2"} );
return 0;
}
오류 및 경고없이 컴파일됩니다. 왜?
런타임 오류가 발생합니다. Expression: Transposed pointer range
누군가 여기서 무슨 일이 일어나고 있는지 설명해 주시겠습니까?
편집하다.
코드를 디스 어셈블하고 디버거에서 실행합니다
foo( {"str1", "str2"} );
00F739A8 sub esp,1Ch
00F739AB mov esi,esp
00F739AD mov dword ptr [ebp-0C8h],esp
00F739B3 lea ecx,[ebp-0D1h]
00F739B9 call std::allocator<char>::allocator<char> (0F7136Bh)
00F739BE push eax
00F739BF push offset string "str2" (0F84DB8h)
00F739C4 push offset string "str1" (0F84E2Ch)
00F739C9 mov ecx,esi
00F739CB call std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> ><char const *,0> (0F71569h)
00F739D0 call std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (0F71843h)
00F739D5 add esp,1Ch
생성자를 처음 호출 할 때 충돌이 발생합니까?
편집 내용을 이해하지 못했지만 다른 질문처럼 보이므로 새 질문을 게시해야합니까?
—
Mooing Duck