c++;if语句不会结束 我对C++是相当新的,我不确定我是否正确解释了。

c++;if语句不会结束 我对C++是相当新的,我不确定我是否正确解释了。,c++,C++,我有一段代码(函数),在运行整个程序时不会结束 该函数的目的是首先生成一个从0到1的随机数。接下来,如果该随机数大于0.6,它将进入另一个函数。死亡的作用是完美的。如果随机数小于0.6,那么它将使病毒点推回一个称为REACH的载体。它还会将点写入文件。然而,这种状态从未停止过 void replication(vector<Virus>& virus, int a, int b, double& times, int& iv,

我有一段代码(函数),在运行整个程序时不会结束

该函数的目的是首先生成一个从0到1的随机数。接下来,如果该随机数大于0.6,它将进入另一个函数。死亡的作用是完美的。如果随机数小于0.6,那么它将使病毒点推回一个称为REACH的载体。它还会将点写入文件。然而,这种状态从未停止过

void replication(vector<Virus>& virus, int a, int b, double& times, int& iv, 
                 ofstream& data_file, int p, vector<Direction>& direction_v, 
                 vector<Virus>&replicate, int step)
{
    point R,P;

    double replicates  = ((double) rand() / (RAND_MAX));
    //how long the virus takes to reach the necleus

    if( replicates>0.6)
    {
        cout<<"No Replication "<<endl;
        virus_death(times, iv, virus,a,b,data_file,p,direction_v, step);
    }
    else if( replicates<=0.6)
    {
        cout<<"Replication"<<endl;

        ofstream tom;
        tom.open("Timing_nuc.dat");

        cout<<"Points"<<endl;
        R.x = virus[p].getx();
        R.y = virus[p].gety();
        R.t = virus[p].gett();

        cout<<"Write to File"<<endl;
        tom<<p+1<<"\t"<<R.x<<"\t"<<R.y<<"\t"<<R.t<<"\n";

        cout<<"New Points"<<endl;
        P.x = a;
        P.y = b;
        P.t = 0;
        cout<<P.x<<"\t"<<P.y<<"\t"<<P.t<<"\n";


        replicate.push_back(P);
        int aspa = replicate.size();
        cout<<"Replication Size:"<<aspa<<endl;
    }           
}
void复制(载体和病毒、int a、int b、double和times、int和iv、,
流和数据文件、int p、向量和方向v、,
向量和复制,整数步)
{
R点,P点;
双重复=((双)rand()/(rand_MAX));
//病毒到达necleus需要多长时间
如果(复制>0.6)
{

不能你确定你的某个地方没有无限递归吗?例如,可能
病毒死亡
再次调用
病毒的位置

此外,您并不真正检查
virus[p]
是否有效。如果
p
在其范围内,可以添加一个小的安全检查


如果你在某个地方因为某种原因把你的堆栈搞得一团糟,各种奇怪的事情都可能发生——也可能是一些无休止的循环。

这里没有循环。循环?我看不到任何循环。“不要试图弯曲循环-那是不可能的…”查看以了解如何以一种更可能得到您想要的答案的方式提问。
矢量化的
有什么意义?即使您说要推它,您似乎也没有使用它。您实际上是推到了
复制
矢量中。只是检查了没有无限递归和病毒[p]是有效的。你能详细说明一下你在其他地方弄乱我的堆栈是什么意思吗?你是如何检查没有无限递归的?顺便说一句,当你在调试器中一步一步地进行时,你会看到什么?当你写一个错误的内存地址时,堆栈就会弄乱。像valgrind这样的工具可能会检测到这一点。
void location_of_virus(vector<Virus>&virus,double& times, int& iv,
                        ofstream& data_file, vector<Direction>& direction_v,
                        vector<Virus>&virus_engulf, circle&cell_c, 
                        circle&nuclei_c, vector<Virus>&replicate, int step)
{
    int a;
    int b;

    //int nc,cc,cmc,nci;
    float dis_c, dis_n;

    int virus_size= virus.size();
    //type = "virus";
    for(int i =0; i<virus_size; i++)
    {
        a = virus[i].getx();
        b = virus[i].gety();

        //to check where the virus is in location to the environment
        dis_c = cell_c.distance(a,b);
        dis_n = nuclei_c.distance(a,b);

        if(dis_n < 5)
        {
            location =" Inside Nucleus";
            cout<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<endl;
            data_file<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<"\n";
            replication(virus,a,b,times,iv,data_file,i,direction_v,replicate,step);
        }   
        else if(dis_n ==5)
        {
            location = "Nucleus";
            cout<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<endl;
            data_file<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<"\n";
            nucleus(virus,a,b,times,iv,data_file,i,direction_v,step);

        }
        else if(dis_c <25 && dis_n>5)
        {
            location = "Cytoplasm";
            cout<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<endl;
            data_file<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<"\n";
            cytoplasm(virus,a,b,times,iv,data_file,p,direction_v,step);
        }
        else if(dis_c ==25)
        {
            location = "Cell Membrane";
            cout<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<endl;
            data_file<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<"\n";
            endocytosis(virus,a,b,times,iv, data_file,i,direction_v,virus_engulf,cell_c,nuclei_c);
        }
        else if (((a ==0 || a == 50 || a>0 || a<50)&& (b ==0 || b == 50 || b>0 || b<50)) && dis_c>15)
        {
            location ="Extracellular Matrix";
            cout<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<endl;
            data_file<<i+1<<"\t"<<virus[i]<<"\t"<<direction_v[i]<<"\t"<<location<<"\n";
        }
        else
        {
            location ="Left the System";
            cout<<i+1<<"\t"<<virus[i]<<"\t"<<location<<endl;
            data_file<<i+1<<"\t"<<virus[i]<<"\t"<<location<<"\n";

        }
    }
}