यह कोड जीसीसी और क्लैंग के संस्करण (उबंटू ट्रस्टी) में ठीक काम करता था, और विन 7 में वीएम पर मिंगव के माध्यम से ... हाल ही में मैंने विली में अपग्रेड किया और लगातार यहां क्लैंग क्रैश के साथ बनाया गया।क्या यह सरल सी ++ प्रोग्राम <locale> का उपयोग कर सही है?
#include <iostream>
#include <locale>
#include <string>
int main() {
std::cout << "The locale is '" << std::locale("").name() << "'" << std::endl;
}
कभी कभी अपनी एक निरर्थक शब्द स्ट्रिंग Aborted: Core dumped
और कभी कभी अपने invalid free
द्वारा पीछा किया।
$ ./a.out
The locale is 'en_US.UTF-8QX�у�X�у����0�����P�����\�(��\�(��\�(��h��t�������������y���������ț�ԛ�������en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_UP����`�������������������������p�����������@��������������`�������������p��������������������@��@��@��`��������p������������0��P��p���qp��!en_US.UTF-8QЈ[�����\�(��\�(��\�(�����������@�� �����P�����0�����P�����\�(��\�(��\�(��Ȣ�Ԣ����������������(��4��@��L��en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8!�v[��������������@�� �����P�����0�����P�����\�(��\�(���(��h��t��������������������Ȥ�Ԥ�������en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8!��[�� ����[�������7����7��.,!!x�[��!��[��!�[��@�����������@�� �����P�����0�����P�����\�(��\�(��\�(��(��4��@��L��X��d��p��|������������n_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8ѻAborted (core dumped)
$ ./a.out
The locale is 'en_US.UTF-8QX\%�QX\%�Q�G�0H��H�PI��I�\:|�Q\D|�Q\>|�QhK�tK��K��K��K��K��Q�K��K��K��K��K��K�en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8en_US.UTF-8ѻ
*** Error in `./a.out': free(): invalid pointer: 0x0000000000b04a98 ***
Aborted (core dumped)
(ऊपर दोनों कार्यक्रम outputs बहुत संक्षिप्त या गया वे इस सवाल में फिट नहीं होता।)
मैं भी उसके साथ एक invalid free on Coliru रूप में अच्छी तरह मिला है।
लेकिन यह बहुत cppreference पर उदाहरण कोड के समान है:
#include <iostream>
#include <locale>
#include <string>
int main()
{
std::wcout << "User-preferred locale setting is " << std::locale("").name().c_str() << '\n';
// on startup, the global locale is the "C" locale
std::wcout << 1000.01 << '\n';
// replace the C++ global locale as well as the C locale with the user-preferred locale
std::locale::global(std::locale(""));
// use the new global locale for future wide character output
std::wcout.imbue(std::locale());
// output the same number again
std::wcout << 1000.01 << '\n';
}
वास्तव में है कि कोड crashes Coliru भी ...: facepalm:
More Coliru से समान कोड का crashes।
क्या यह क्लैंग द्वारा उपयोग की जाने वाली सी ++ लाइब्रेरी में एक बग है, या यह कोड दोषपूर्ण है?
ध्यान दें: यदि आप <clocale>
का उपयोग करते हैं तो यह क्रैश सी ++ एपीआई तक सीमित प्रतीत होता है, इसके बजाय चीजें ठीक काम करने लगती हैं, इसलिए यह सी ++ बाइंडिंग में कुछ मामूली समस्या हो सकती है?
setlocale
का उपयोग कर विविधताएं: 123
मुझे स्पष्ट रूप से एक बग की तरह दिखता है। क्या आपने क्लैंग मेलिंग सूची और/या इसे बग के रूप में रिपोर्ट करने पर विचार किया था? पूछने के लिए एक और उपयुक्त जगह की तरह लगता है ... –
अगर क्लैंग, कंपाइलर, इस कोड को संकलित करता है, तो यह एक क्लैंग बग है, और इसकी सूचना दी जानी चाहिए। –
@LightnessRacesinOrbit: हाँ मुझे लगता है कि यह अगला चरण –