C++ 在C+中传递值+;-处理1:exc错误访问

C++ 在C+中传递值+;-处理1:exc错误访问,c++,function,C++,Function,我对以下代码有问题: void mc_duurtijd(int multiproject) { double random_getal[MULTIPROJECT][PROJECTEN][ACTIVITEITEN][RUNS]; double stochastische_duurtijd_berekenen[MULTIPROJECT][SCENARIO][PROJECTEN][ACTIVITEITEN][RUNS]; std::random_device rd;

我对以下代码有问题:

void mc_duurtijd(int multiproject)
{
    double random_getal[MULTIPROJECT][PROJECTEN][ACTIVITEITEN][RUNS];
    double stochastische_duurtijd_berekenen[MULTIPROJECT][SCENARIO][PROJECTEN][ACTIVITEITEN][RUNS];

    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_real_distribution<> dis(0, 1);

    for (int p=0;p<PROJECTEN;p++)
    {
        for (int i=1;i<n_p[multiproject][p]-1;i++)
        {
            for (int r = 0; r < RUNS; r++)
            {
                random_getal[multiproject][p][i][r]=dis(gen);

            }
        }
    }

    for (int s=0;s<SCENARIO;s++)
    {
        for (int p=0;p<PROJECTEN;p++)
        {
            for (int i=1;i<n_p[multiproject][p]-1;i++)
            {
                for (int r=0;r<RUNS;r++)
                {
                    stochastische_duurtijd_berekenen[multiproject][s][p][i][r]=bepaal_stochatische_duurtijd(random_getal[multiproject][p][i][r],multiproject,s, p, i, r);
                }
            }
        }
    }

    for (int s=0;s<SCENARIO;s++)
    {
        for (int p=0;p<PROJECTEN;p++)
        {
            for (int i=1;i<n_p[multiproject][p]-1;i++)
            {   stochastische_duurtijd[multiproject][s][p][i]=0.0;
                for (int r=0;r<RUNS;r++)
                {
                    stochastische_duurtijd[multiproject][s][p][i]+=stochastische_duurtijd_berekenen[multiproject][s][p][i][r];
                }
                stochastische_duurtijd[multiproject][s][p][i]=stochastische_duurtijd[multiproject][s][p][i]/RUNS;
            }
        }
    }

    for (int s=0;s<SCENARIO;s++)
    {
        for (int p=0;p<PROJECTEN;p++)
        {
            for (int i=1;i<n_p[multiproject][p]-1;i++)
            {
                stochastische_duurtijd[multiproject][s][p][i]=floor(stochastische_duurtijd[multiproject][s][p][i]/scale+0.5)*scale;
            }
        }
    }


void berekeningen_initieel(int multiproject) 
{
    mc_duurtijd(multiproject);                    
    bereken_CP_per_project_stochastisch(multiproject);
    bereken_CP_max_stochastisch(multiproject); 
    for (int s=0;s<SCENARIO;s++)              
    {
         bereken_backward_stochastisch(multiproject, s);
    }

    for (int s=0;s<SCENARIO;s++)               
    {
        bereken_slack_stochastisch(multiproject);
    }

    toekennen_activiteitID(multiproject);
}

int main()
{
    mp =0;

    scale=0.000000000001;

    srand(time(NULL)); //  the random seed is initialized to a value representing the current time (calling time) to generate a different value every time the program is run.

    inlezen_data();
    print_output();

    for (int multi =0; multi<MULTIPROJECT;multi++)
    {
        berekeningen_initieel(multi);
        maak_planning(multi);
        bereken_doelfunctie(multi);
        print_evaluatie(multi);
    }

    return 0;
}
void mc_duurtijd(int多项目)
{
双随机[多项目][PROJECTEN][ACTIVITEITEN][RUNS];
双重随机性[MULTIPROJECT][SCENARIO][PROJECTEN][ACTIVITEITEN][RUNS];
std::随机_装置rd;
标准:mt19937 gen(rd());
一致实分布dis(0,1);

对于@Nick指出的(int p=0;p),我还确认这很可能是因为数组对于函数来说太大了。但是有一个解决方法。您可以将数组声明移动到函数外部,如下所示:

#define MULTIPROJECTEN  420 
#define SCENARIO          4
#define PROJECTEN         3
#define ACTIVITEITEN     32
#define RUNS            100

double random_getal[MULTIPROJECT][PROJECTEN][ACTIVITEITEN][RUNS];
double stochastische_duurtijd_berekenen[MULTIPROJECT][SCENARIO][PROJECTEN][ACTIVITEITEN][RUNS];

void mc_duurtijd(int multiproject) { ... }
void berekeningen_initieel(int multiproject) { ... }
int main() { ... }

几乎所有的C执行环境都使用堆栈来存储本地变量和嵌套函数调用的返回地址。堆栈的大小通常是可配置的;通常限制在1个MiB左右

给定MULTIPROJECTEN=420;PROJECTEN=3;ACTIVITEITEN=32;RUNS=100 mc_duurtijd中的随机数据大小约为32 MiB。尝试执行该程序会导致堆栈溢出


对大缓冲区使用动态内存分配(即malloc)。

尝试将值写入日志(或控制台)。您需要进行一些调试并缩小问题范围。堆栈溢出不是一个讨论板。若要对OP执行迭代调试,请邀请他们到聊天室。谢谢,但我无法运行该函数,因为发生错误xc_错误访问。这可能是由于数组的大小和维数造成的吗?数组double random_getal[MULTIPROJECT][PROJECTEN][ActiviteItem][RUNS];MULTIPROJECTEN=420;PROJECTEN 3;ActiviteItem=32;RUNS=100。当我通过设置MULTIPROJECTEN=5来减小数组的大小时,它正在工作。但我真的需要这么大的大小..我怀疑(
for)(int I=1;i@LightningRacisinObrit下一次可以吗