2012-02-28 65 views
0
#include <time.h> 

int perm_table[255]; 
float rand_vectors[255][3]; 

initialize_random_numbers() 
{ 
    int i; 
    float tmp[3], length; 
    for (i=0; i<255; i++) 
    { 
     perm_table[i] = rand() % 255; 

     tmp[0] = (float)(rand() % 1000); 
     tmp[1] = (float)(rand() % 1000); 
     tmp[2] = (float)(rand() % 1000); 

     printf("\n%i", i); 

     memcpy(rand_vectors[i], tmp, sizeof(float)*3); 
    } 
} 

運行此打印每一個從0到253 (上255),給人一種分段錯誤之前。段錯誤,想不通爲什麼

注出這條線

perm_table[i] = rand() % 255; 

去除錯誤。

我完全被這個打敗了。任何幫助?

+0

請不要將標籤置於問題標題中。 – 2012-02-28 21:45:46

+5

適用於[ideone](http://ideone.com/FQxzR)。你確定這是你正在調用的代碼嗎?如果'perm_table'的大小是254,它就符合這個錯誤。或者它可能在代碼中的其他地方? – amit 2012-02-28 21:47:52

+0

您是否嘗試編譯並單獨運行此代碼?它應該工作得很好!問題一定在其他地方。 – jweyrich 2012-02-28 21:49:56

回答

3

這段代碼對我來說沒有任何問題。

該段錯誤可能發生在之後函數返回並且不是因爲這個函數。

的最後一個數字印刷事實是253是因爲流後不 printf("\n%i", i);沖洗併爲內存設計缺陷的功能後發生時,流從來沒有得到刷新。

默認情況下,連接到終端時,stdout是行緩衝的。刷新stdout或者撥打fflush(stdout)或打印'\n'字符。

+1

呃......是的。這就是爲什麼「memcpy(rand_vectors [i],tmp,sizeof(float)* 3); 」使用float * 3。我不確定你的意思。 – Orpheon 2012-02-28 21:44:11

+0

@Orpheon我刪除了我的第一個答案,我讀得太快了 – ouah 2012-02-28 22:00:11

0

我打賭會在printf聲明中。

試試看修改於:

printf("%d\n"); // basically having the \n in the end. 

有時你看不到屏幕上的輸出,因爲它仍然在printf的緩衝區。 \n確保緩衝區被清除。