Visual Studio обычно не позволяет выделять массивы размером более 0x7fffffff
байтов с ошибкой:
error C2148: total size of array must not exceed 0x7fffffff bytes
Я предполагаю, что есть ошибка компилятора, которая препятствует обнаружению массива oversize в этом случае, и массив не инициализируется правильно.
Использование std::vector
и выделение массива в куче работает:
#include <stdio.h>
#include <vector>
constexpr auto array_size = 50000000;
int main()
{
std::vector < std::vector< std::vector< double > > > M( array_size, std::vector< std::vector< double > >( 2, std::vector< double >( 20 ) ) );
for (int n = 0; n < array_size; n++)
printf("%d %f\n", n, M[n][0][0]);
}
Обратите внимание, что при этом будет использовано больше, чем минимум, требуемых 16 ГБ памяти, если вам действительно нужно, чтобы все данные в памяти были одновременно, одномерный вектор может быть более эффективным.