【问题标题】:"Function uses '80408' bytes of stack: exceeds analyze:stacksize '16384'. Consider moving some data to heap" C++ error“函数使用'80408'字节的堆栈:超过分析:stacksize'16384'。考虑将一些数据移动到堆”C++错误
【发布时间】:2021-12-07 23:31:37
【问题描述】:

我正在尝试生成数据并将它们放入单独的文件中 这是代码的一部分,它给了我一个堆栈大小错误。我尝试调整编译器以更改堆栈大小并抑制警告消息,但它不起作用。 当我运行代码时,它不会创建输出文件并继续运行而不给出输出。 请问如何解决这个问题?

这是我的代码:

double generateWindData(double windData[4])
{
int avgWindSpeed = windData[0];
int gust = windData[1];
int simulationDuration = windData[2];
int stepSize = windData[3];
int stepCounter = simulationDuration / stepSize + 1;

ofstream windFile;
windFile.open("WindSpeedData.txt", ios::out);
if (windFile.fail())
{
    cerr << "WindSpeedData.txt could not be opened." << endl;
    exit(-1);
}

int upperLimit = avgWindSpeed + gust;
int lowerLimit = avgWindSpeed - gust;
int randomWindSpeeds = rand() % ((upperLimit - lowerLimit + 1) + lowerLimit);

double simulatedSpeeds[10000];
int* initialSpeeds = new int[stepCounter];
int* times = new int[stepCounter];
int time = 0;
for (int i = 0; i < stepCounter; i++)
{
    initialSpeeds[i] = randomWindSpeeds;
    simulatedSpeeds[i] = initialSpeeds[i];
    times[i] = time;
    windFile << times[i] << ' ' << initialSpeeds[i] << endl;
    time += stepSize;
}

ofstream finalFile;
finalFile.open("WindSimulation.txt", ios::out);
if (finalFile.fail())
{
    cerr << "WindSimulation.txt could not be opened." << endl;
    exit(-1);
}
for (int i = 0; i < stepCounter; i++) {
    finalFile << times[i] << ' ' << simulatedSpeeds[i] << ' '; 
    if (simulatedSpeeds[i] != initialSpeeds[i]) 
    {
        finalFile << '1' << endl; //this outputs 1 to WindSimulation.txt if storm takes place
    }
    else {
        finalFile << endl;
    }
}
finalFile.close();

}

【问题讨论】:

  • simulatedSpeeds[i] != initialSpeeds[i] 永远不可能是真的。你所有的价值观都是一样的;他们是randomWindSpeeds
  • int* initialSpeeds = new int[stepCounter];int* times = new int[stepCounter]; 存在内存泄漏。请考虑改用std::vector

标签: c++ arrays function stack-overflow


【解决方案1】:

我会将simulatedSpeeds 替换为动态分配的数组,例如std::vector,所以它看起来像这样:std::vector&lt;double&gt; simulatedSpeeds;(你也可以使用它的reserve 方法)然后在循环内simulatedSpeeds[i] = initialSpeeds[i]; 应该替换为simulatedSpeeds.push_back(initialSpeeds[i]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    相关资源
    最近更新 更多