代码在这里,它由G ++编译。输入N = 600000后输入。弹出一个窗口说 * .exe已停止工作。调试代码时,标题为错误的窗口表示程序收到信号SIGSEGV,分段错误。来排序时。现在,我知道它的stackoverflow错误。谢谢你,所有人!
#include <iostream>
#include <stdlib.h> /* srand, rand */
#include <algorithm>
int main (int argc, char *argv[]) {
int N;
std::cout << "N:";
int a[N];
for(int i = 0; i < N; i++){
a[i] = rand()%N;
}
std::sort(a,a+N);
std::cout << "The "<<N/2<<"th smallest number is: " << a[N/2-1] <<"\n";
return 0;
}
答案 0 :(得分:0)
600000数组大小是堆栈上的太多内存。而是使用全局数组。
#include <iostream>
#include <stdlib.h> /* srand, rand */
#include <algorithm>
const int MAX = 600001;
int a[MAX]; //make it global
int main (int argc, char *argv[]) {
}
答案 1 :(得分:0)
据我所知,具有运行时大小的数组是C99功能,仅在某些C ++编译器中作为扩展提供。将其切换为std::vector<int> a(N);
,代码应该有效。
顺便说一句:
scanf()
:while (cin >> N) { /*use n*/ }
。