Sign in to follow this  
Followers 0
belfegor

Mingw g++ 4.6.2 crash

4 posts in this topic

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:
[code]
#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;
}
[/code]
and it crashed:
[quote]
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?
0

Share this post


Link to post
Share on other sites
MinGW does not fully support C++11 features yet. This may be one of those items that isn't quite there.
1

Share this post


Link to post
Share on other sites
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.
1

Share this post


Link to post
Share on other sites
Thanks. I thought it was somehow my fault.

@Bregma
Like this?
[code]
std::mt19937 gen(static_cast<unsigned int>(std::time(nullptr)));
...

[/code]

Is this suitable for game projects puproses, when it is possibly called multiple times in "tight" loops?
0

Share this post


Link to post
Share on other sites
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.
1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0