Я пытаюсь написать программу, которая принимает входные данные в виде динамического массива и сортирует их от самого низкого до самого высокого, а затем отображает от самого высокого до самого низкого. Однако я получаю сообщение об ошибке отладки: «ОБНАРУЖЕНО ПОВРЕЖДЕНИЕ КУЧИ: после нормального блока (№ 182) по адресу 0x010CE3E8. CRT обнаружил, что приложение записывает в память после окончания буфера кучи».
Что ж, программа строится и успешно работает. Однако, когда я пытаюсь выйти из программы, это занимает очень много времени, и я получаю сообщение об ошибке.
void insert_Array(int Array1[], int array_size)
{
for (int counter = 0; counter < array_size; ++counter)
{
cout << " Please enter the " << counter << " number : ";
cin >> Array1[counter];
}
return;
}
void swap(int* a, int* b)
{
int holder = *a;
*a = *b;
*b = holder;
}
void sort_Array(int Array1[], int array_size)
{
int lowestNum_index;
for (int counter1 = 0; counter1 < array_size; ++counter1)
{
for (int counter2 = counter1; counter2 < array_size; ++counter2)
{
if (Array1[counter2] < Array1[counter2 + 1])
lowestNum_index = counter2;
else
lowestNum_index = counter2 + 1;
}
swap(Array1[counter1], Array1[lowestNum_index]);
}
return;
}
Основная функция
int* npointer = new int[nNumbers];
insert_Array(npointer, nNumbers);
sort_Array(npointer, nNumbers);
cout << " The number you desired is " << nNumbers << endl;
cout << " The numbers in the array from high to low are ";
for (int i = 0; i < nNumbers; ++i)
{
cout << *(npointer + nNumbers - i) << " ";
}
cout << endl;
delete [] npointer;
Когда я запускаю программу, она успешно сортирует числа, которые я даю, от большего к меньшему.
ОБНАРУЖЕНО ПОВРЕЖДЕНИЕ КУЧИ: после нормального блока (#182) по адресу 0x010CE3E8. CRT обнаружил, что приложение записывает в память после окончания буфера кучи.
std::vector
существует, и он существует более 21 года в стандартной библиотеке C++? Во-вторых, вся работа находится внутриinsert_Array
иsort_Array
— вы должны были опубликовать этот код. - person PaulMcKenzie   schedule 31.05.2019*(npointer + nNumbers - i)
это кажется ошибкой на единицу, должно быть*(npointer + nNumbers - i - 1)
. Кроме этого, вы не показываете, что делаютinsert_Array
иsort_Array
, так что если там есть проблема, мы не сможем сказать. - person Qubit   schedule 31.05.2019insert_Array
илиsort_Array
. Опубликуйте минимально воспроизводимый пример - person Alan Birtles   schedule 31.05.2019if (Array1[counter2] < Array1[counter2 + 1])
-- Что произойдет, еслиcounter2
равноarray_size - 1
? Видите там проблему? - person PaulMcKenzie   schedule 31.05.2019sort_array
на эту:void sort_Array(int Array_test[], int array_size) {std::vector<int> Array1(Array_test, Array_test + array_size);
и больше ничего не меняйте. Запустите программу, используя отладочную сборку. Теперь следите за ошибками, которые среда выполнения отметит для вас. Как только вы исправите эти ошибки, вернитесь к массиву. - person PaulMcKenzie   schedule 31.05.2019std::vector
просто усложняет поиск этих ошибок. - person PaulMcKenzie   schedule 31.05.2019assert
, если вы запустили программу и использовали простой тестовый массив, такой как{3,2,1}
. Этот пример программы выдает ошибку в Visual Studio, сборка отладки - person PaulMcKenzie   schedule 31.05.2019