C ++ 2D数组和增强随机数发生器

时间:2016-09-25 10:20:30

标签: c++ arrays boost

我在我的程序中放入了两个循环 - 一个用一个值N0填充二维数组,下一个循环生成随机数。当我有数组循环时,我的程序不起作用。我得到"未处理的异常...(参数:0x00000003)"。但没有第一个循环它可以正常工作。感谢帮助。

     #include <iostream>
#include <vector>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_int_distribution.hpp>
using namespace std;


const double czas = 1E9;

int main()
{
    //Declaration of variables
    const int k = 20;
    const int L = 30;   
    double N0 = 7.9E9;
    int t,i,j, WalkerAmount;
    double excitation, ExcitationAmount;

    double slab[30][600];

    //Random number generator
    boost::random::mt19937 gen;
    boost::random::uniform_int_distribution<> numberGenerator(1, 4);



    //Filling slab with excitation
    for (int i = 0; i <= L; i++)
    {
        for (int j = 0; j <= k*L; j++) { slab[i][j] = N0; }
    }

    //Time loop
    for (t = 0; t < czas; t++) {
        WalkerAmount = 0;
        ExcitationAmount = 0;

        for (int i = 0; i <= L; i++)
        {
            for (int j = 0; j <= k*L; j++)
            {
                int r = numberGenerator(gen);
                cout << r << endl;
            }
        }
    }
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

C ++中的数组从0索引到n-1,其中n是数组的容量。然后,代码跟随代码是错误的。

int main()
{
    //Declaration of variables
    const int k = 20;
    const int L = 30;   
    double N0 = 7.9E9;

    double slab[30][600];

    // [...]

    for (int i = 0; i <= L; i++)
    {
        for (int j = 0; j <= k*L; j++) { slab[i][j] = N0; }
    }
}

初始化阵列时,你总是走得太远了。在您考虑i == Lj == k*L的情况下,您会到达内存中超出阵列的区域。

您要执行的循环是

for (int i = 0; i < L; i++)
    for (int j = 0; j < k*L; j++)
        // Initialize