Я написал код для многомерных очень больших массивов.Он компилируется, но когда я его выполняю, он дает мне ошибку сегментации.Мой код:
int NT = 35; int NX = 25; int NY = 25; int NZ = 25;
double dx = 0.5; double dy = 0.5; double dz = 0.5; double dt = 0.1;
double PosT[NT];
double PosX[NX];
double PosY[NY];
double PosZ[NZ];
for (int i = 0; i < NT; i++)
PosT[i] = i * dt + dt;
for (int i = 0; i < NX; i++)
PosX[i] = dx * i;
for (int i = 0; i < NY; i++)
PosY[i] = dy * i;
for (int i = 0; i < NZ; i++)
PosZ[i] = dz * i;
double* b_x = (double*)malloc(NX*NY*NZ * sizeof(double));
double* b_y = (double*)malloc(NX*NY*NZ * sizeof(double));
if (b_x == NULL || b_y == NULL) {
cout << "Malloc space error!" << endl;
return 0;
}
for (int ix = 0; ix < NX; ix++) {
for (int iy = 0; iy < NY; iy++) {
for (int iz = 0; iz < NZ; iz++) {
int position = ix * NY*NZ + iy * NZ + iz;
b_x[position] = 0.;
b_y[position] = 0.;
}
}
}
Мой код работает до сих пор, но когда я использую следующий очень большой 2d массив по malloc, я получаю ошибку.Далее следует следующий код:
double** B=(double**)malloc(NX*NY*NZ*LT*sizeof(double*));
if (B == NULL) {
cout << "Malloc space error!" << endl;
return 0;
}
cout << "following not works" << endl;
for (int ix = 0; ix < NX; ix++) {
for (int iy = 0; iy < NY; iy++) {
for (int iz = 0; iz < NZ; iz++) {
int position = ix * NY*NZ + iy * NZ + iz;
for (int it = 0; it < NT; it++) {
B[position][it] = 0.;
cout << B[position][it] << endl;
}
}
}
}
Я пробовал malloc, но он не работал.Любые решения или предложения.Каковы альтернативные способы использования очень больших таких массивов?потому что я получаю ошибку сегментации ядра сбрасывает ошибку.