2012-08-03 71 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

相關問題