C++ 2D array and boost random number generator

-2

I put in my program two loops - one fills 2D array with one value N0, and next loop is generating random number. And my program does not work when I have loop for array. I get "Unhandled exception... (parameters: 0x00000003)". But without first loop it works correctly. Thanks for help.

     #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;
}
c++
arrays
boost
asked on Stack Overflow Sep 25, 2016 by Witek • edited Sep 25, 2016 by Witek

1 Answer

1

Arrays in C++ are indexed from 0 to n-1 where n is the capacity of the array. Then, the code following code is wrong.

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; }
    }
}

When you initialize your array, you always go one steep too far. As you consider the case where i == L and j == k*L you reach an area in the memory that out of your array.

The loop you want to execute is

for (int i = 0; i < L; i++)
    for (int j = 0; j < k*L; j++)
        // Initialize
answered on Stack Overflow Sep 25, 2016 by Thomas W.

User contributions licensed under CC BY-SA 3.0