调试---程序接收信号SIGSEGV,分段故障

时间:2015-03-12 06:55:10

标签: c++ sorting

代码在这里,它由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;
}

2 个答案:

答案 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);,代码应该有效。

顺便说一句:

  • 排序这不是找到第N个最小数字的最快方法。
  • 请考虑克里斯的评论,你的问题缺乏必要的信息。另外,缩进并清理代码,我认为不需要运行循环。
  • 您还可以从IOStreams中检索输入,无需使用scanf()while (cin >> N) { /*use n*/ }