Я наткнулся на этот код для разработки класса для 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 () пытается записать двоичное значение в указатель на пустую область памяти (newOrgDna.dataPointer)и так далее.Но я не могу понять, как собрать все эти двоичные значения, чтобы получить целочисленное значение, присвоенное переменной «dna» newOrg, чтобы я проверил целочисленное значение, присвоенное отдельному организму и в конечном итоге всей популяции, находящейся во всей области памяти, которая имеетбыл назначен на "orgs".
Как вы уже догадались, я не очень знаком с управлением памятью на этом глубоком уровне деталей, поэтому ваша помощь очень ценится.
Большое вам спасибо