vector — Получение странной ошибки. Исключение Microsoft C ++: std :: out_of_range в ячейке памяти 0x002cf6.

Итак, я работаю над этим кодом на C ++. Код ниже ..

#include <iostream>
#include <ctime>
#include <string>
#include <vector>
using namespace std;

vector<int> makePerson(int n)
{
vector<int>person;
for(int i=0;i<3;i++)
{
person.push_back(rand()%255+1);
}
return person;
}

vector<vector<int> > makeGeneration(int n)
{
vector<vector<int> > generation;
for(int i=0;i<n;i++)
{
generation.push_back(makePerson(i));
}
return generation;
}

vector<int> createChild(vector<vector<int> > &parentGeneration, double mutationRate)
{
int maleParent  = (rand()%parentGeneration.size())+1;
int femaleParent = (rand()%parentGeneration.size())+1;
bool checkGender = true;
while(checkGender)
{
if(maleParent==femaleParent)
{
checkGender = true;
}
else
{
checkGender = false;
break;
}
}

vector<int> child;
vector<int> temp;
for(int i=0;i<3;i++)
{
temp.push_back(parentGeneration.at(maleParent).at(i));
temp.push_back(parentGeneration.at(femaleParent).at(i));
}

for(int i=0;i<3;i++)
{
child.push_back(temp.at((rand()%3)+1));
}

temp.clear();

for(int i=0;i<3;i++)
{
if((mutationRate*100) > (rand()%100)+1)
{
child.at(i)=(rand()%255)+1;
}
}
return child;
}

int main()
{
int N,k,g;
N=1000;
k=2;
double m=0.05;
double d=0.05;
srand(static_cast<unsigned int>(time(0)));
vector<vector<int> > parentGeneration;
vector<vector<int> > childGeneration;
parentGeneration = makeGeneration(N);

for(int i=0;i<parentGeneration.size();i++)
{
for(int j=0;j<3;j++)
{
cout<<parentGeneration.at(i).at(j)<<endl;
}
cout<<endl;
}

cout<<"reach"<<endl;
for(int i=0;i<(1000);i++)
{
childGeneration.push_back(createChild(parentGeneration,m));
}

cout<<"***CHILD GENERATION***"<<endl;

for(int i=0;i<childGeneration.size();i++)
{
for(int j=0;j<3;j++)
{
cout<<childGeneration.at(i).at(j)<<endl;
}
cout<<"i="<<i<<endl;
cout<<endl;
}
return 0;
}

Итак, ошибки:

  1. Microsoft C ++ исключение: std :: out_of_range в ячейке памяти 0x002cf6c4.
  2. Ошибка проверки времени выполнения # 0 — значение ESP не было должным образом сохранено при вызове функции. Обычно это результат вызова функции, объявленной с одним соглашением о вызовах с указателем на функцию dec

Я думаю, что это некоторая проблема с вектором и генератором случайных чисел, потому что эта ошибка случайна. Иногда работает до 1000, а иногда останавливается между ними.

Какие-либо предложения.
Действительно срочно ..

PLEASEEEE
Спасибо в адване: D

0

Решение

Я столкнулся с похожими проблемами с кодом. Я наконец-то остановился на использовании Microsoft Application Verifier, который позволил мне сосредоточиться на этой проблеме. Найдите приложение Verifier и загрузите его. Затем запустите исполняемый файл appverifier.exe, который находится в папке C: \ Windows \ System32. Выберите исполняемый файл и включите проверку памяти. Затем запустите свой код в Visual Studio, как вы всегда делаете, и он должен перейти к месту или около того, где проблема. Он не сделает всю вашу работу за вас, но если вы знаете свой код, он наверняка поможет.

2

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

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

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