Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
297 views
in Technique[技术] by (71.8m points)

c++ - Debug---Program received signal SIGSEGV, Segmentation fault

The code is here, and it is compiled by G++. After input N=600000 and enter. A window popped out said that *.exe has stopped working. When debugging the code, a window titled Error said that Program received signal SIGSEGV, Segmentation fault. when come to sort line. Now, I know it's stackoverflow error.Thank you, all guys!

#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] <<"
";
return 0;
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

600000 array size is too much memory on stack.Instead use a global array.

#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[]) {
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...