0

わかりました..だから私は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++ 例外: メモリ位置 0x002cf6c4 の std::out_of_range。
  2. 実行時チェックの失敗 #0 - ESP の値が関数呼び出しで適切に保存されませんでした。これは通常、関数ポインター dec を使用して 1 つの呼び出し規則で宣言された関数を呼び出した結果です。

このエラーはランダムであるため、ベクトルとランダムジェネレーターに問題があると思います。1000まで機能することもあれば、途中で停止することもあります。

助言がありますか。本当に緊急..

PLEASEEEEEアドバンに感謝します:D

4

1 に答える 1

2

私はコードで同様の問題に直面しました。私はついにMicrosoftのApplicationVerifierを使用することに決めました。これにより、この問題に焦点を当てることができました。Application Verifierを見つけて、ダウンロードします。次に、C:\ Windows\System32フォルダーにある実行可能appverifier.exeを実行します。実行可能ファイルを選択し、メモリチェックを有効にします。次に、いつものようにVisual Studioでコードを実行すると、問題のある場所またはその近くにジャンプするはずです。それはあなたのためにあなたのすべての仕事をするわけではありません、しかしあなたがあなたのコードを知っているならそれは確かに役立つでしょう。

于 2012-12-05T05:51:59.317 に答える