由于阵列使用而检测到堆损坏

时间:2014-09-26 02:37:23

标签: c++ arrays heap-memory

抱歉,我是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;
}

1 个答案:

答案 0 :(得分:1)

sort函数中,您正在访问索引为j + 1的元素。但是,这是出界的。 arrayz数组的有效索引为0size-1。如果jsize-1j+1size,则会访问数组末尾。