Witek - 10 months ago 69

C++ Question

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;

}

Answer Source

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
```