C ++使用其他结构中的值填充结构时出现问题

时间:2018-11-13 22:26:04

标签: c++ arrays struct

我在尝试找出为什么我无法通过一段代码获得正确功能时遇到问题。我环顾四周以尝试找到解决方案,但是,我未能做到这一点。下面是我的代码示例:

//Structs
typedef struct
{
    int gene[60];
    int fitness;

} individual;

typedef struct
{
    int cond[5];
    int out;
}rule;

//Array of individuals
individual population[P]

int function(individual solution){
    int k = 0;
    //Array of rules
    rule rulebase[10]
    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 5; j++){
            rulebase[i].cond[j] = solution.gene[k++];
        }
        rulebase[i].out = solution.gene[k++];
    }

    for (int i = 0; i < 5; i++){
        cout << rulebase[0].cond[i];
    }

传递给函数的解决方案是“人口”中的第一个个体,并且基因数组仅包含二进制数,例如:

gene = [0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1] //There will be 60 in total

所需的功能是用解决方案中找到的值填充规则库中的规则结构。例如,使用上面的示例,规则库中的第一条规则将在“ cond”数组中具有以下值:

[0, 0, 1, 0, 1]

和'out'将是解决方案中的下一个整数:

[1]

然后,下一个规则将以相同的方式用解决方案中的下一个值填充。

我遇到的问题是代码似乎用解决方案中的所有值填充了每个规则的“条件”数组,这与上述所需方法相反。例如,当我在'rulebase [0]'中打印基因时,我得到:

[0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1]

反对:

[0, 0, 1, 0, 1]

我似乎无法弄清楚为什么我会遇到这个问题,因为代码在我看来应该可以工作?由于我正在认真努力,任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

一个规则在cond中仅包含5个值,而不是您显示的10个值。只是您的代码会打印出错误的rulebase[0]值,即它超出了数组范围并打印-除了cond的{​​{1}}值之外,{{1的值下一条规则的}}和rulebase[0],在内存中紧随其后。