Error en tiempo de ejecución en el programa compilado con MinGW gcc / g ++ (nuwen distro)
#include <iostream>
#include <random>
using namespace std;
class myclass
{
private:
static bool randomBit()
{
std::random_device rd; // Obtain a random seed number from hardware
std::mt19937 gen(rd()); // Initialize and seed the generator <---- CRASH!!
uniform_int_distribution<> distr(0, 1); // Define the distribution range
return distr(gen);
}
myclass::myclass() = delete; // Disallow creating an instance of this object
public:
static bool generateRandomBit()
{
return randomBit();
}
};
int main()
{
cout<<myclass::generateRandomBit()<<endl;
return 0;
}
Esto compila y se ejecuta sin problemas con MSVC. Se compila sin errores congcc
pero elmt19937 gen(rd());
line hace que el programa se bloquee con el siguiente mensaje:
"myprog.exe ha dejado de funcionar
Un problema causó que el programa dejara de funcionar correctamente. Windows cerrará el programa y le notificará si hay una solución disponible ".
¿Algunas ideas
omando @gcc:g++ mycode.cpp -fpermissive -s -o myprog.exe
ACTUALIZAR Agregando-O2
al comando de compilación hace que el programa se ejecute, aunque de manera incorrecta. La función "aleatoria" ya no es aleatoria; siempre devuelve 1. Por ejemplo, probando con el siguiente código "principal" ...
int main()
{
int a[2] {0, 0};
for (int i = 0; i < 1000; i++) {
a[myclass::generateRandomBit()]++;
}
cout<<"<"<<a[0]<<", "<<a[1]<<">"<<endl;
return 0;
}
... produce esta salida:<0, 1000>