Dieser Code schien in (ubuntu trusty) Versionen von gcc und clang in Ordnung zu sein, und in Win 7 auf einer VM via mingw ... Kürzlich habe ich auf Wily und Builds mit Clang Crash konsequent hier aktualisiert.Ist dieses einfache C++ Programm mit <locale> korrekt?
#include <iostream>
#include <locale>
#include <string>
int main() {
std::cout << "The locale is '" << std::locale("").name() << "'" << std::endl;
}
Manchmal ist es ein Kauderwelsch Zeichenfolge von Aborted: Core dumped
gefolgt und manchmal seine 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)
(Beide Programmausgaben oben stark abgekürzt wurden, oder sie würden in dieser Frage nicht passt.)
ich auch eine invalid free on Coliru damit auch bekam.
Aber das ist sehr ähnlich dem Beispiel-Code auf 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';
}
Eigentlich dass Code crashes Coliru auch ...: facepalm:
Morecrashes ähnlichen Code aus Coliru.
Ist das ein Fehler in der C++ - Bibliothek, die von clang verwendet wird, oder ist dieser Code defekt?
Beachten Sie auch: Diese Abstürze scheinen auf C++ api beschränkt zu sein, wenn Sie stattdessen <clocale>
verwenden scheinen die Dinge in Ordnung zu funktionieren, so kann es nur ein triviales Problem in den C++ - Bindungen sein?
Variationen setlocale
mit: 123
Sieht ziemlich offensichtlich wie ein Fehler für mich aus. Haben Sie darüber nachgedacht, die Claming-Mailingliste zu fragen und/oder als Bug zu melden? Scheint wie ein passender Ort zu fragen ... –
Wenn call, der Compiler, kompiliert diesen Code, dann ist dies ein Clang Bug, und sollte gemeldet werden. –
@LightnessRacesinOrbit: Ja, ich denke, das ist der nächste Schritt –