抱歉,我是C ++和编程的全新手,我收到了堆损坏错误。我认为我在未分配的内存中写作,但我似乎无法找到错误的位置......程序很难获取用户输入值并重新排列它们以便它们能够提升。我也在学习模板。
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
template <typename T>
void sort(T arrayz[], int size, char ch)
{
T temporary;
int k, j;
if (ch = 'a')
{
for (k = 0; k < size; k++)
{
for (j = 0; j < size; j++)
{
temporary = arrayz[j];
arrayz[j] = arrayz[j + 1];
arrayz[j + 1] = temporary;
}
}
}
}
int main()
{
int choices, range, i;
int x;
char ch;
cout << ("Enter the amount of numbers you want =>");
cin >> x;
int *numbers = new int[x];
if (!numbers)
{
cout << "Memory Allocation error!";
cin.get();
exit(1);
}
for (int i = 0; i<x; i++)
{
cout << "Option number" << i + 1 << " =>";
cin >> numbers[i];
}
cout << "Do you want ascending or descending values (a/d) =>" ;
cin >> ch;
if (ch = 'a')
{
sort(numbers, x, ch);
}
else if (ch = 'd')
{
sort(numbers, x, ch);
}
delete[] numbers;
fflush(stdin);
cin.get();
return 0;
}
答案 0 :(得分:1)
在sort
函数中,您正在访问索引为j + 1
的元素。但是,这是出界的。 arrayz
数组的有效索引为0
到size-1
。如果j
为size-1
,j+1
为size
,则会访问数组末尾。