Использование stringstream дает мне ошибку сегментации

Я возился с генетическими алгоритмами и решил попробовать новый формат для моей фитнес-функции. (Очень тривиально сейчас).

void calcfitness()
{
stringstream toi;
//Max fitness 72
int attack = 0, defense = 0,
speed = 0, energy = 0, disease = 0;

toi << genes [0]; toi >> attack; toi.clear();
toi << genes [1]; toi >> defense; toi.clear();
toi << genes [2]; toi >> speed; toi.clear();
toi << genes [3]; toi >> energy; toi.clear();
toi << genes [4]; toi >> disease; toi.clear();fitness = (attack * 2) + (defense * 2) + speed + (energy * 3) - (disease * 5);
}

ДНК хранится в виде строки, которую я пытаюсь извлечь, используя поток строк в отдельных генах. Когда

fitness =

В строке не используется взвешивание (* 3, * 2 и т. д.), она работает нормально (хотя и медленнее, чем то, что я использовал). Однако, когда я добавляю взвешивание, я получаю ошибку сегментации. Программа даже не доходит до main () до того, как это произойдет.
Как это могло дать мне ошибку? Насколько я могу судить, я не пытаюсь получить доступ к памяти, которой я не владею.
Я искал вокруг, и все подобные проблемы, которые я мог найти, были связаны с выходом указателя из области видимости, но, опять же, насколько я могу судить, проблема здесь не в этом.

Есть ли лучший способ настроить это? Я пытался делать

attack = genes [0];

но это назначает ASCII-код символа для атаки, а не само значение.

Вот начало класса, к которому он принадлежит:

class Being
{
int id, var1, var2, var3, var4;
string genes;

public:
double fitness;

Being()
{
id = env.getcurid();
var1 = 0, var2 = 0, var3  = 0, var4 = 0;
genes = gengenes(DNASIZE);
fitness = 0;
}

Любая помощь здесь будет принята с благодарностью.

Спасибо.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]