Mingw g++ 4.6.2 crash

Started by
3 comments, last by alvaro 12 years, 1 month ago
Some time ago i have downloaded CodeBlocks with Ming32 package, since it has outdated g++ version i have downloaded it separately (4.6.2) and changed compiler/linker paths acordingly, and also added new PATH path into environment variables to Mingw/bin.
Then recently tried some example code from cppreference:

#include <random>
#include <iostream>

int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 6);
for(int n=0; n<10; ++n)
std::cout << dis(gen) << ' ';
std::cout << '\n';
return 0;
}

and it crashed:

terminate called after throwing an instance of 'std::runtime_error'
what(): random_device::random_device(const std::string&)

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

[/quote]

Got same message if i compile it from command line its same as from IDE.

Tried it on VS 2010 it works, tried it on Ubuntu 11.10 g++ 4.6.2 thru Virtual machine also works.

Any idea?
Advertisement
MinGW does not fully support C++11 features yet. This may be one of those items that isn't quite there.
That error means a failure to open the file "/dev/urandom". My guess is that such a device is not supported under MinGW. If there is in fact a valid hardware entropy source available in Windows and presented as a file node, pass the name of that to the std::random_device constructor, otherwise you will not be able to use the hardware entropy source feature of the standard library.

You could, instead, use good old std::time() to initialize your PRNG engine. It's pretty portable and good enough for non-cryptographic purposes.

Stephen M. Webb
Professional Free Software Developer

Thanks. I thought it was somehow my fault.

@Bregma
Like this?

std::mt19937 gen(static_cast<unsigned int>(std::time(nullptr)));
...



Is this suitable for game projects puproses, when it is possibly called multiple times in "tight" loops?
Seeding a pseudo-random number generator in a tight loop is never a good option. You should seed it once and use it many times.

This topic is closed to new replies.

Advertisement