我定义了一个随机函数 ( int random(int sup, int seed)
),它返回一个介于 0 和sup-1
. 我已经定义了一个结构点,其中 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 type 3(route locations-array size), 8(pop_size), 1(time limit), 1 (par_n)
这是整个代码(不到150行),总是插入1到time_limit,因为我还没有完成循环。 https://docs.google.com/open?id=0ByylOngTmkJddVZqbGs1cS1IZkE
PS我正在尝试编写一个进化算法,用于路线优化