Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+;中使用数组时如何防止堆栈溢出+;? 我正在编写一个C++程序,它在for循环中的每个迭代中调用函数,并将结果“存储”在.cv文件中。该函数接受18个参数,并将结果存储在一个数组中。当我以10000次迭代运行程序时,它运行良好。 但是,当我将迭代次数增加到100000时,会显示堆栈溢出错误:_C++_Arrays_For Loop_Memory_Stack Overflow - Fatal编程技术网

在C+;中使用数组时如何防止堆栈溢出+;? 我正在编写一个C++程序,它在for循环中的每个迭代中调用函数,并将结果“存储”在.cv文件中。该函数接受18个参数,并将结果存储在一个数组中。当我以10000次迭代运行程序时,它运行良好。 但是,当我将迭代次数增加到100000时,会显示堆栈溢出错误:

在C+;中使用数组时如何防止堆栈溢出+;? 我正在编写一个C++程序,它在for循环中的每个迭代中调用函数,并将结果“存储”在.cv文件中。该函数接受18个参数,并将结果存储在一个数组中。当我以10000次迭代运行程序时,它运行良好。 但是,当我将迭代次数增加到100000时,会显示堆栈溢出错误:,c++,arrays,for-loop,memory,stack-overflow,C++,Arrays,For Loop,Memory,Stack Overflow,ConsoleApplication.exe中0x00007FF6E76D8408处未处理的异常:0xC00000FD:堆栈溢出(参数:0x0000000000000001,0x000000ABB1693000) 该函数的名称为wes5.cpp,它是一个void函数。它将计算结果存储在“结果”数组中。 请注意,函数的一些输入是使用for-loop随机生成的。有人能告诉我为什么它可以在10000次迭代中正常工作,而不能在100000次迭代中正常工作吗 #include <iostream&g

ConsoleApplication.exe中0x00007FF6E76D8408处未处理的异常:0xC00000FD:堆栈溢出(参数:0x0000000000000001,0x000000ABB1693000)

该函数的名称为wes5.cpp,它是一个void函数。它将计算结果存储在“结果”数组中。 请注意,函数的一些输入是使用for-loop随机生成的。有人能告诉我为什么它可以在10000次迭代中正常工作,而不能在100000次迭代中正常工作吗

#include <iostream>
#include "wes.hpp"
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
#include <fstream>
int main()
{
    srand(time(NULL));

    const int num_E = 100000;  // number of itteration

    double E1_max = 2000.0 * 1000; double E1_min = 300.0 * 1000;
    double E2_max = 100.0 * 1000; double E2_min = 1.0 * 1000;
    double E3_max = 100.0 * 1000; double E3_min = 1.0 * 1000;

    int num_H = 100.0;
    double H1_max = 12; double H1_min = 3;
    double H2_max = 25; double H2_min = 17;

    int num_L6000 = 100000; 
    double L6000_max = 7000; double L6000_min = 5000;

    //matrix declration for E
    double E1[num_E]; double E2[num_E]; double E3[num_E];
    double E4[num_E];double E5[num_E];

    //matrix declration for H
    double H1[num_E]; double H2[num_E]; double H3[num_E];
    double H4[num_E];double H5[num_E];

    //matrix declration for q
    double q[num_E]; 

    // variable description
    double u1 = 0.35; double u2 = 0.45; double u3 = 0.45; double u4 = 0.45; double u5 = 0.45;
    double la1 = 1; double la2 = 1; double la3 = 1;
    int l = 1;
    double p[] = { 0 };
    double a[] = { 5.9 };
    double xc[] = { 0 };
    double yc[] = { 0 };
    int l1 = 1;
    int ls = 1;
    double xs[] = { 0 };
    double ys[9] = {};
    double zs[] = { 0 };
    double results[900];
    //double my_results[10]; //num_E
    double X[9] = { 0, 8, 12, 18, 24, 36, 48, 60, 72 };

    for (int i = 0; i < num_E; i++)     //  Random data generation for E
    {
        int num_items_E1 = E1_max - E1_min + 1;
        int num_items_E2 = E2_max - E2_min + 1;
        int num_items_E3 = E3_max - E3_min + 1;

        E1[i] = E1_min + rand() % num_items_E1;
        E2[i] = E2_min + rand() % num_items_E2;
        E3[i] = E3_min + rand() % num_items_E3;
        E4[i] = E3[i];
        E5[i] = E3[i];
    }


    for (int i = 0; i < num_E; i++)     // Random data generation for H
    {
        int num_items_H1 = H1_max - H1_min + 1;
        int num_items_H2 = H2_max - H2_min + 1;

        H1[i] = H1_min + rand() % num_items_H1;
        H2[i] = H2_min + rand() % num_items_H2;
        H3[i] = 999;
        H4[i] = 999;
        H5[i] = 999;
    }


    for (int i = 0; i < num_E; i++)     // Random data generation for q
    {
        int num_items_load = L6000_max - L6000_min + 1;
        double load = L6000_min + rand() % num_items_load;
        q[i] = load / (3.141652 * pow(a[0], 2));
    }

    std::fstream my_file;
    my_file.open("Output.csv");
    my_file << "E1" << "," << "E2" << "," << "E3" << "," <<
        "H1" << "," << "H2" << "," << "H3" << "," <<
        "q" << "," << "D0" << "," << "D1" << "," << "D2" << "," << "D3" << "," << "D4" << "," <<
        "D5"<< "," << "D6" << "," << "D7" << "," << "D8" << "\n";

    // running the main program
    for (int i = 0; i < num_E; i++) {

        double e1 = E1[i]; double e2 = E2[i]; double e3 = E3[i]; double e4 = E4[i]; double e5 = E5[i];
        double h1 = H1[i]; double h2 = H2[i]; double h3 = H3[i]; double h4 = H4[i]; double h5 = H5[i];
        p[0] = q[i];

        for (int j = 0; j < 9; j++) {

            ys[0] = X[j];

            wes5(&e1, &e2, &e3, &e4, &e5,
                &h1, &h2, &h3, &h4, &u1, &u2, &u3, &u4, &u5,
                &la1, &la2, &la3, &l,
                p, a, xc, yc,
                &l1, &ls, xs, ys, zs,
                results);

            //my_results[i] = results[700];

            if (j == 0) {
                my_file << E1[i] << "," << E2[i] << "," << E3[i] << "," <<
                    H1[i] << "," << H2[i] << "," << H3[i] << "," <<
                    p[0] << "," << results[700] << ",";
            }
            else {
                my_file << results[700] << ",";
            }


        }

        my_file << "\n";

    }
    my_file.close();

}
#包括
#包括“wes.hpp”
#包括
#包括
#包括
#包括
#包括
int main()
{
srand(时间(空));
const int num_E=100000;//提交的数量
双E1_最大值=2000.0*1000;双E1_最小值=300.0*1000;
双E2_最大值=100.0*1000;双E2_最小值=1.0*1000;
双E3_最大值=100.0*1000;双E3_最小值=1.0*1000;
int num_H=100.0;
双H1_最大值=12;双H1_最小值=3;
双倍H2_最大值=25;双倍H2_最小值=17;
int num_L6000=100000;
双L6000_最大值=7000;双L6000_最小值=5000;
//E的矩阵分解
双E1[num_E];双E2[num_E];双E3[num_E];
双E4[num_E];双E5[num_E];
//H的矩阵分解
双H1[num_E];双H2[num_E];双H3[num_E];
双H4[num_E];双H5[num_E];
//q的矩阵分解
双q[num_E];
//变量描述
双u1=0.35;双u2=0.45;双u3=0.45;双u4=0.45;双u5=0.45;
双la1=1;双la2=1;双la3=1;
int l=1;
双p[]={0};
双a[]={5.9};
双xc[]={0};
双yc[]={0};
int l1=1;
int ls=1;
双xs[]={0};
双ys[9]={};
双zs[]={0};
双结果[900];
//加倍我的结果[10];//num\u E
双X[9]={0,8,12,18,24,36,48,60,72};
for(int i=0;imy_file根据您的错误判断,您使用的是Visual Studio,它的默认堆栈大小为1MB。在代码中,您分配了10个100000双精度数组。因此,每个数组都是800000字节(双精度是8字节)。将其乘以10,则仅阵列的堆栈大小就达到8MB。这就是为什么会出现堆栈溢出错误

对于大小为10000的阵列,您使用0.8MB的堆栈,该堆栈足够小,可以继续工作


您可以使用该选项更改堆栈大小,但我建议您重新考虑代码。也许使用
向量
更好?

请将其提取为a。您有10个数组,每个数组包含100000个元素。这将使堆栈溢出。在将代码减少为a的同时,您还可以编辑标题,使其继续它是描述性的,而不仅仅是重复标记信息。标题应足够清楚地说明问题或疑问,以便将来的读者在浏览搜索结果列表时能够找到问题的解决方案。您当前的标题不包含通过阅读标记。尝试在声明前加上关键字:
static
。这将把变量放在与全局变量相同的区域中,全局变量通常比局部变量存储容量更大。如果这不起作用,请使用
std::vector
,或动态分配数组。这真的很有效!感谢定义数组de使用
static
的CLARATION将变量放置在与全局变量相同的空间中,全局变量的内存空间比堆栈的内存空间大。