我在我的程序中放入了两个循环 - 一个用一个值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;
}
答案 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 == L
和j == k*L
的情况下,您会到达内存中超出阵列的区域。
您要执行的循环是
for (int i = 0; i < L; i++)
for (int j = 0; j < k*L; j++)
// Initialize