gpt4 book ai didi

大型 vector/数组的 C++ 未处理异常

转载 作者:行者123 更新时间:2023-11-28 02:19:59 25 4
gpt4 key购买 nike

我的代码中不断出现未处理的异常,这让我很为难。

我确信这是我声明变量的方式。

基本上,我试图创建 3 个数组、M 行、N 列随机变量。如果我设置我的 N = 1,000 和 M = 10,000,这不是问题。如果我随后更改 M = 100,000,我会收到未处理的异常内存分配错误。

谁能帮我理解为什么会这样。

部分代码是在 VS2010 上编写的。我现在已经转向 VS2013,所以任何关于使用新功能的额外建议也将不胜感激。干杯,

#include <cmath>
#include <iostream>
#include <random>
#include <vector>
#include <ctime>
#include <ratio>
#include <chrono>
int main()
{
using namespace std::chrono;

steady_clock::time_point Start_Time = steady_clock::now();

unsigned int N; // Number of time Steps in a simulation
unsigned long int M; // Number of simulations (paths)

N = 1000;
M = 10000;
// Random Number generation setup
double RANDOM;
srand((unsigned int)time(NULL)); // Generator loop reset

std::default_random_engine generator(rand()); // Seed with RAND()

std::normal_distribution<double> distribution(0.0, 1.0); // Mean = 0.0, Variance = 1.0 ie Normal

std::vector<std::vector<double>> RandomVar_A(M, std::vector<double>(N)); // dw
std::vector<std::vector<double>> RandomVar_B(M, std::vector<double>(N)); // uncorrelated dz
std::vector<std::vector<double>> RandomVar_C(M, std::vector<double>(N)); // dz

// Generate random variables for dw
for (unsigned long int i = 0; i < M; i++)
{
for (unsigned int j = 0; j < N; j++)
{
RANDOM = distribution(generator);
RandomVar_A[i][j] = RANDOM;
}
}
// Generate random variables for uncorrelated dz
for (unsigned long int i = 0; i < M; i++)
{
for (unsigned int j = 0; j < N; j++)
{
RANDOM = distribution(generator);
RandomVar_B[i][j] = RANDOM;
}
}
// Generate random variables for dz
for (unsigned long int i = 0; i < M; i++)
{
for (unsigned int j = 0; j < N; j++)
{
RANDOM = distribution(generator);
RandomVar_C[i][j] = RANDOM;
}

}
steady_clock::time_point End_Time = steady_clock::now();

duration<double> time_span = duration_cast<duration<double>>(End_Time - Start_Time);
//Clear Matricies
RandomVar_A.clear();
RandomVar_B.clear();
RandomVar_C.clear();

std::cout << std::endl;
std::cout << "its done";
std::cout << std::endl << std::endl;
std::cout << "Time taken : " << time_span.count() << " Seconds" << std::endl << std::endl;
std::cout << "End Of Program" << std::endl << std::endl;
system("pause");
return 0;
}
// *************** END OF PROGRAM ***************

最佳答案

三个 100,000 x 1,000 的 double 组代表 3 亿个 double 。假设 8 字节加倍,那就是大约 2.3 GB 的内存。很可能您的进程在 Windows 上默认限制为 2 GB(即使您的机器上安装了更多的 RAM)。但是,有一些方法可以让您的进程访问更大的地址空间:Memory Limits for Windows .

关于大型 vector/数组的 C++ 未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com