2012-02-28 62 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确保缓冲区被清除。