for (auto i = 4; i < 10; ++i) { auto n = pow(10, i); cout << "10^"<< i << endl; int *copy = new int[n]; int *arr = new int[n]; for (auto k = 0; k < n; ++k){ arr[k] = copy[k] = rand() % (2147483647 + 2147483648); тут 4 разных алгоритма сортировки delete [] arr; delete [] copy; } И вот проблема в том что когда я начинаю создавать массив в 10^8 степени программа крашится, не могу понять почему, после каждой сортировки я приравниваю массив arr который уже отсортирован к его первоначальное версии в массиве copy ошибка Возникло необработанное исключение по адресу 0x75FFCC12 в ...: исключение Microsoft C++: std::bad_alloc по адресу памяти 0x00EFFC1C. Весь код https://pastebin.com/rB9uc84s
ты пробовал просто создавать массивы, без сортировки? типа так #include <iostream> #include <cmath> using namespace std; int main() { for (auto i = 4; i < 10; ++i) { long n = pow(10, i); cout << "10^"<< i << endl; int *copy = new int[n]; int *arr = new int[n]; delete [] arr; delete [] copy; } } C #include <iostream> #include <cmath> using namespace std; int main() { for (auto i = 4; i < 10; ++i) { long n = pow(10, i); cout << "10^"<< i << endl; int *copy = new int[n]; int *arr = new int[n]; delete [] arr; delete [] copy; } } кстати, да - в теории проблема может быть с переполнением инта - попробуй везде переменную n заменить с int на long, особенно в алгоритме combSort (и тип переменной gap тоже)
vtlstolyarov, когда генеришь массив 10в9 он выдает ошибку 'terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc' Но при этом когда 10в8 он это делает спокойно
изменения с 4 на 8 (с помощью лонга) это не помогает при краше. тут выход за пределы из-за количества итераций (раз работа указателями) или памятью, а большое количество итераций это переполнение. и если не ошибаюсь уже само 10^8 это и есть переполнение инта не говоря уже о будущих операциях
LVV, max int это 2,147,483,647 - то есть даже 10^9 это еще не переполнение, но он там местами умножает n на 10 и это уже даст переполнение поэтому я предложил сменить int на long. и я не совсем понимаю о каком переполнении количества итерации ты говоришь.