一个简单的程序来排序随机数

时间:2015-05-13 14:33:48

标签: c++ segmentation-fault

我刚刚编写了一个简单的程序,按顺序对随机数进行排序:

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

void swap(int &a,int &b){
    int temp=a;
    a=b;b=temp;
}

int main(int argc, char* argv[]){
    static int option;
    if(argv[1])option=atol(argv[1]);
    else option=0;
    srand((unsigned)time(0));
    const int size=option;
    int array[size];
    for(int i=0;i<size;i++){
        array[i]=rand()%size;
    }

    //algorithm
    for(int i=0;i<size;i++){
        for(int j=i+1;j<size;j++){
            if(array[i]>array[j])swap(array[i],array[j]);
        }
    }
    //print
    for(int i=0;i<size;i++){
        cout<<array[i]<<' ';
    }
    return 0;
}

你这样运行:

time ./a.exe (how much random number to generate)

它可以正常工作到100000,但不止于此给了我一个seg错误错误。 我究竟做错了什么?是因为内存不足???或是操作系统偷偷做了一些我不承认的事情?

2 个答案:

答案 0 :(得分:2)

  

&#34;是因为内存不足?&#34;

是的,您的堆栈大小可能太小而无法容纳。使用

std::vector<int> array(size);

而不是

int array[size];

答案 1 :(得分:0)

是的,您的堆栈大小太小,您可以在堆中分配数组,如:int *array = (int*)malloc(size*sizeof(int))。当然,你可以使用vector,但是vector有更复杂的封装,所以性能不会很好。

相关问题