1

私が見るものはすべて、乱数を使用して適切なパラメーターシードを取得する方法を示しています。

int seed = time(NULL);

セグメンテーション違反。そうです

time_t seed = time(NULL);
int seed = (int)time(NULL);

などなど

何かご意見は?

4

2 に答える 2

8

すぐに頭に浮かぶ唯一のことは、誰かがNULL非ゼロに再定義したということです。null 以外のポインタを渡すと、そのメモリに書き込もうとするため、segfault が発生する可能性があります。

クイックチェックはtime(0)代わりに試すことです。

失敗すると、他の場所での破損が原因である可能性があります。その場合の最善の策は、デバッガーを使用してシングルステップで実行することです。

また、正しいヘッダーが含まれていることを確認してください。整数 (以前の標準に従うコンパイラのパラメータのデフォルト) がポインタとは異なるサイズであるシステムでは、スタックのミスアライメントが発生する可能性があります。いくつかの 64 ビット システムでこの種の効果を見たことがあります。

于 2012-08-03T14:10:23.093 に答える
1

私のために働く:

#include <time.h>

int main()
{
    time_t seed = time(NULL);
    return 0;
}

// gcc x.c && ./a.out
// echo $?
// > 0
于 2012-08-03T14:09:16.697 に答える