程序崩溃序列排序程序

时间:2013-02-24 21:37:49

标签: c++ crash

完成修复错误后,我运行了程序并且崩溃了。已经修复了一段时间但程序无法执行。程序是关于序列和排序。编译器是devcpp.Seems不是一个很好的堆栈溢出。 :)

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip> 
#include <conio.h>

using namespace std;

void selectionSort(int *, int);

int main()
{
    int N;
    int a[ N ];

    cout << "\n Enter the length of sequence:";
    cin >> N;

    for (int i = 0; i < N && i < 5; ++i)
    {
        a[ N ] = rand() % 1000000 + 0;
        srand(time(0));
        cout << "Random sequence";
        for (int i = 0; i < N; i++)
            cout << setw(4) << a[i];
        cout << endl;
    }

    cout << "Sorted sequence";
    selectionSort(a, N);
    for (int j = 0; j < N; j++)
        cout << setw(4) << a[j];
    cout << endl;
    getch();
}

void selectionSort(int *array, int N)
{
    int temp, i, j;
    for (i = 0; i < N - 1; i++)
    {
        j = i;
        while (j > 0 && array [j - 1] > array [j])
        {
            temp = array [j];
            array[j] = array [j - 1];
            j--;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您正在定义一个变量N大小的数组。 使用这个insted:

int *a = new int[N];
// ...
delete [] a;

第二个问题是a[N] = ...,它是对不存在的元素的访问。

此外,最好将srand(time(0));放在代码的开头,而不是循环。

int main()
{
    srand(time(0));

    int N;
    cout << "\n Enter the length of sequence:";
    cin >> N;

    int *a = new int[N]; // If you compiler support you can: int a[N];

    for (int i = 0; i < N; ++i)
    {
        a[ i ] = rand() % 1000 + 0;
    }

    cout << "Random sequence";
    for (int j = 0; j < N; j++)
        cout << setw(4) << a[j];
    cout << endl;


    cout << "Sorted sequence";
    selectionSort(a, N);
    for (int j = 0; j < N; j++)
        cout << setw(4) << a[j];
    cout << endl;
    getch();

    delete [] a; // If you use pointer version
}

答案 1 :(得分:2)

您正在尝试访问您不拥有的内存。

 int N;
 int a[ N ];

您正在声明N然后使用它定义您的数组,但在那个时间点它尚未初始化。然后,当你尝试写入内存中的某个位置时,会出现故障。