c++ динамический массив
как лучше выделить память под массив?
double **a=new double *[N];
for (int i=0; i
так, при миллион на миллион чисел, выкидывает из-за нехватки памяти
как лучше выделить память под массив?
double **a=new double *[N];
for (int i=0; i
так, при миллион на миллион чисел, выкидывает из-за нехватки памяти
// code
#include
using namespace std;
int main() {
size_t rows, cols;
cout << "rows, cols?.. ";
cin >> rows >> cols;
double ** matrix = new (nothrow) double * [rows];
if (matrix) {
for (rsize_t row = 0; row < rows; row ++) {
matrix[row] = new (nothrow) double [cols];
if (!matrix[row]) {
for (rsize_t r = 0; r < row; r++)
delete[] matrix[r];
delete[] matrix;
matrix = NULL;
break;
}
}
if (matrix) {
cout << "Well!\n";
for (rsize_t row = 0; row < rows; row ++)
delete[] matrix[row];
delete[] matrix;
matrix = NULL;
} else {
cout << "Very badly!!\n";
}
} else {
cout << "Very badly!\n";
}
cout << "The end!\n";
cin.get(); cin.get();
return 0;
}
// результат в консоли
// диспетчер задач, файл подкачки
дабл - 8 байт. Не всегда, конечно, но бывает.
миллион даблов - 8 миллионов байт = 8 МБ.
миллион раз по 8 МБ - 8 террабайт.
У тебя виртуальной памяти в компьютере точно не меньше 8 ТБ?
Я насчитал 29 терабайт для 32х (4 байта на указатель) и 58 терабайт для 64х (8 байт на указатель)
(4)8,000,000 х 8,000,000 / 1024 / 1024 / 1024 / 1024
Но тебе даже 2 гигабайта не позволят выделить
Что то неверно в постановке задачи. Миллион на миллион - это 10 в 12 степени! Даже по 4 байта это 4*10^12 байт =3,7 Тб. У вас не хватит памяти.
Выложи полностью условие. Памяти тебе не хватит, это правильно сказали, но мне сложно представить себе задачу, в которой реально понадобится такой массив (ведь даже если тебе хватит оперативной памяти, все равно на перебор всех элементов уйдет 10^12 операций с плавающей запятой, что на типичном домашнем компьютере займет порядка минуты (с использованием графического ускорителя, конечно, побыстрее) , а на алгоритм сложностью O(n^2) - 30 тысяч лет...