1

我所看到的一切都说明了我如何获得一个随机数的合理参数种子。

int seed = time(NULL);

段错误。也一样

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

等等等等

有什么想法吗?

4

2 回答 2

8

唯一立即想到的是有人重新定义NULL为非零。如果您传递一个非空指针,它将尝试写入该内存,这可能会导致段错误。

快速检查是尝试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 回答