【发布时间】:2012-01-07 22:05:13
【问题描述】:
我在为 GA/GP 开发一个类时遇到了这段代码,但未能理解它,因此无法调试程序。
typedef struct {
void *dataPointer;
int length;
} binary_data;
typedef struct {
organism *organisms; //This must be malloc'ed
int organismsCount;
int (*fitnessTest)(organism org);
int orgDnaLength;
unsigned int desiredFitness;
void (*progress)(unsigned int fitness);
} evolutionary_algorithm;
以上是直截了当的。然后我们尝试在测试它们的适应性等之前启动有机体......
int main(int argc, char *argv[])
{
srand(time(NULL));
int i;
evolutionary_algorithm ea;
ea.progress = progressDisplayer;
ea.organismsCount = 50;
ea.orgDnaLength = sizeof(unsigned int);
organism *orgs =(organism *) malloc(sizeof(organism) * ea.organismsCount);
for (i = 0; i < 50; i++)
{
organism newOrg;
binary_data newOrgDna;
newOrgDna.dataPointer = malloc(sizeof(unsigned int));
memset(newOrgDna.dataPointer, i, 1);
newOrgDna.length = sizeof(unsigned int);
newOrg.dna = newOrgDna;
orgs[i] = newOrg;
}
据我了解,memset() 尝试将二进制值写入该内存位置 void 指针 (newOrgDna.dataPointer) 等等。但是我不知道如何重新组装所有这些二进制值以获得分配给 newOrg 变量“dna”的整数值,以便我检查分配给单个生物体的整数值,并最终检查整个内存位置中的整个种群被分配到“组织”。
正如您从上面猜测的那样,我对这种深层次细节的内存管理不是很熟悉,因此非常感谢您的帮助。
非常感谢
【问题讨论】:
-
9 个问题,0 个被接受。如果您希望人们继续回答您的问题,请接受一些答案。
-
当然我会尝试回答一些问题,因为我的编程技能相当有限,但会尽力而为。有没有办法找到过滤中级问题。
-
蝉让您确认(通过本网站的接受方式)您的问题的答案是好的。
-
该代码来自哪里?大多数主要的 GA 框架(我确认 ECJ 和 OpenBEAGLE)都提供了将个体的二进制值转换为 int/float 的方法(如果语言没有)。
标签: c++ memory-management genetic-algorithm memset