分段错误,无法弄清楚原因

时间:2012-02-28 21:38:06

标签: c arrays random segmentation-fault

#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;

删除错误。

我完全被这个打败了。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

这段代码对我来说没有错。

在函数返回后,可能会出现的段错误,而不是因为这个函数。

打印的最后一个数字是253的事实是因为之后没有刷新流 printf("\n%i", i);并且因为在函数之后发生了段错误,所以流永远不会被刷新。

默认情况下,当连接到终端时,stdout是行缓冲的。要刷新stdout,请拨打fflush(stdout)或打印'\n'个字符。

答案 1 :(得分:0)

我打赌将在printf声明中。

尝试将其修改为:

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

有时你看不到屏幕上的输出,因为它仍然在printf的缓冲区中。 \n确保清除缓冲区。