奇怪的分段错误

时间:2012-08-18 17:03:22

标签: c multidimensional-array segmentation-fault

我已经定义了一个随机函数(int random(int sup, int seed)),它返回0到sup-1之间的值。 我已经定义了一个struct,point,其中pos_parents和population是二维数组。 交换函数交换v数组的元素,这是一个“索引”数组。所有这些都是为了将​​par_n成员从群体成员中挑选出pos_parents而不对同一成员进行两次排序。

这会导致分段错误。

如果我用r替换显式值中的变量population[v[r]][j],那么它全部起作用。这怎么可能?我尝试过随机功能,似乎没有任何问题。

此外,当分段故障发生时,printf甚至不会为第一个循环激活。

point population[pop_size][array_size];
point pos_parents[4*par_n][array_size];
int v[pop_size];

for (i=0; i<4*par_n;i++)
    v[i]=i;

for(t=0;t<time_limit;t++) //The cycle of life
{
    for(i=0;i<4*par_n;i++)
    {
        r=random(pop_size-i,i);
        printf("%d\t",r);

        for(j=0;j<array_size;j++)
        {
            pos_parents[i][j]=population[v[r]][j];
        }
        swap(&(v[r]),&(v[pop_size-1-i]));
    }

执行i时输入3(路径位置 - 数组大小),8(pop_size),1(时间限制),1(par_n)

这是整个代码(少于150行),总是将1插入time_limit,因为我还没有完成循环。 https://docs.google.com/open?id=0ByylOngTmkJddVZqbGs1cS1IZkE

P.S。 我正在尝试编写一个用于路由优化的进化算法

1 个答案:

答案 0 :(得分:1)

v[i] = i;的循环从0变为4 * par_n,但v是一个大小为pop_size的数组。这似乎是一个等待罢工的越界问题。 i中的计数器r = random(pop_size - i, i);也是如此,因为i中使用了v[i]