আমি মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও সম্প্রদায় 2019, ভি 16.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
এটি কনস্ট্রাক্টরের প্রথম কলে ক্রাশ হয়?