完成修复错误后,我运行了程序并且崩溃了。已经修复了一段时间但程序无法执行。程序是关于序列和排序。编译器是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--;
}
}
}
答案 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然后使用它定义您的数组,但在那个时间点它尚未初始化。然后,当你尝试写入内存中的某个位置时,会出现故障。