2012-08-03 31 views
1

我看到的一切都是这样说的,我如何得到一个合理的参数种子随机数。int x = time(NULL); => SEGFAULT?

int seed = time(NULL); 

segfaults。所以确实

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

等等,等等

有什么想法?

+1

问题出在别的地方,其中一部分代码你没有显示,我相信。 – Mahesh 2012-08-03 14:06:57

+0

您的系统可以在那个时间(time_t * dest)有dest * mandatory *吗?尝试时间(&种子),看看它是否有效,请 – Senna 2012-08-03 14:07:38

+1

通过'gdb'运行这个,看*哪里*它segfaults。 – MvG 2012-08-03 14:09:12

回答

1

工作对我来说:

#include <time.h> 

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

// gcc x.c && ./a.out 
// echo $? 
// > 0 
7

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

快速检查是尝试time(0)来代替。

如果失败,那可能是其他地方的腐败造成的,在这种情况下,最好的办法就是用调试器单步调试。

还要确保你已经包含正确的标题。在一个整数(在先前的标准之后的编译器中的参数的默认值)与指针的大小不同的系统中,可能会导致堆栈未对齐。我在某些64位系统上看到了这种效果。

+0

时间(0) - >成功。看起来NULL不知何故不起作用。我几乎肯定我自己没有重新定义它。有什么你知道的吗?我只使用常见的头:#包括 的#include 的#include 的#include 的#include 的#include 的#include Lucas 2012-08-03 14:20:33

+0

我使用的是32位系统 – Lucas 2012-08-03 14:22:16

+0

没有_should_触摸NULL,它会打破很多代码。如果你的编译器支持像'gcc -E'这样的预处理器输出(来自内存),你可以检查它。 – paxdiablo 2012-08-03 14:24:29

相关问题