Я запускаю код для решения некоторых вычислительных задач.Когда я делю свой домен на маленькую сетку, например 16 * 16, проблем не будет.Но как только я увеличиваю размер сетки до 121 * 121 (используя больше памяти), появляется эта проблема:
Необработанное исключение в 0x76CC1812 в NS-VSF.exe: исключение Microsoft C ++: std :: bad_alloc в ячейке памяти 0x00AFF5D4.
Я использую динамическое распределение, чтобы использовать как можно меньше памяти (согласно моей способности C ++).Я попытался использовать менее динамический массив в функции, что эта ошибка памяти происходит.но опять та же проблема!
void Poisson(double **A, double **B) {
double **B_old = new double*[M + 2];
for (int i = 0; i < M + 2; ++i) B_old[i] = new double[N + 2]();
double a_x, a_y, a_w;
a_x = pow(delta_y, 2) / (2 * (pow(delta_x, 2) + pow(delta_y, 2)));
a_y = pow(delta_x, 2) / (2 * (pow(delta_x, 2) + pow(delta_y, 2)));
a_w = (pow(delta_x, 2)*pow(delta_y, 2)) / (2 * (pow(delta_x, 2) + pow(delta_y, 2)));
double convergence = 1.0; //to be updated with L2-norm
int k = 0; //number of iterations
while (convergence > 1e-10) {
for (int i = 2; i < M; i++) {
for (int j = 2; j < N; j++) {
B_old[i][j] = B[i][j];
}
}
double sum = 0.0;
for (int i = 2; i < M; i++) {
for (int j = 2; j < N; j++) {
B[i][j] = a_x * (B[i + 1][j] + B[i - 1][j]) + a_y * (B[i][j + 1] + B[i][j - 1]) + a_w * A[i][j];
B[i][j] = B_old[i][j] + w_SOR *(B[i][j] - B_old[i][j]); //SOR
sum = sum + pow(B[i][j] - B_old[i][j], );
}
}
convergence = sqrt(sum / (M*N)); // L2-norm criteria
k++;
if (k%200 == 0)
cout << "k= " << k << "..........." << convergence << endl;
}
//free memory
for (int i = 0; i < M + 2; ++i) delete[] B_old[i]; delete[] B_old;
}