私は二重の機能を持っています
double Grid::getAverageNeighborhoodFitnessEvaluation(int agentPositionX, int agentPositionY)
{
GetNeighbourhood(agentPositionX, agentPositionY,neighborhoodEvaluations);
int neighborscount = 0;
double fitnesssum = 0;
double neighborfitness;
double value;
for (size_t i = 0; i < neighborhoodEvaluations.size(); ++i)
{
if ((*(neighborhoodEvaluations.at(i))) != NULL)
{
neighborfitness = (*(neighborhoodEvaluations.at(i)))->GetFitness();
if(neighborfitness<0)
neighborfitness=0;
fitnesssum+=neighborfitness;
neighborscount++;
}
}
value = fitnesssum/neighborscount;
return value;
}
GetNeighbourhoodは、定義されたタイプ(Agent)の配列をneighborhoodEvaluationsに割り当てます
*(neighborhoodEvaluations.at(i)))->GetFitness();
配列内のそのポイントの値を表すdoubleを返します。これらはすべて以前は問題なく使用されていました。
メインから呼び出された場合(RealXとRealYは2つの整数です)
int currentFitness = getAverageNeighborhoodFitnessEvaluation(RealX,RealY);
常に動作します
double currentFitness = getAverageNeighborhoodFitnessEvaluation(RealX,RealY);
セグメンテーション違反を引き起こします
誰かがこれにどのような可能性が生じる可能性があるか、および/またはintが取ることができるが、doubleはできないように見える値を知っていますか?
これまでのところ、エージェントの実装にエラーを追跡しました
Agent.cpp
#include "Agent.h"
Agent::Agent(void)
{
m_age = 0;
m_fitness = -1;
}
Agent::~Agent(void)
{
}
int Agent::GetAge()
{
return m_age;
}
double Agent::GetFitness()
{
return m_fitness;
}
void Agent::IncreaseAge()
{
m_age++;
}
AgentType Agent::GetType()
{
return m_type;
}
Agent.h
#ifndef AGENT_H
#define AGENT_H
enum AgentType { candidateSolution, cupid, reaper, breeder};
class Agent
{
public:
Agent(void);
virtual ~Agent(void);
double GetFitness();
int GetAge();
void IncreaseAge();
AgentType GetType();
virtual void RandomizeGenome() = 0;
protected:
double m_fitness;
AgentType m_type;
private:
int m_age;
};
#endif // !AGENT_H
しかし、正確な問題を特定できないようです